给 EI 题解写注 qwq。。

化简方差:

\[\frac{1}{n}\sum(a_i-\overline a)^2\\
=\frac{1}{n}(\sum a_i^2-2\overline {a}\sum a_i+n\overline a^2)\\
=(\frac{1}{n}-\frac{1}{n^2})\sum a_i^2-\frac{\sum_{i\neq j}a_ia_j}{n^2}
\]

前面那个系数 \(\dfrac{1}{n}-\dfrac{1}{n^2}\) 由 \(\sum a_i\) 贡献 \(\dfrac{1}{n}\),由 \(-2\overline {a}\sum a_i\) 贡献 \(-\dfrac{2}{n^2}\),由 \(n\overline a^2\) 贡献 \(\dfrac{1}{n^2}\)。

考虑所有非空子序列。枚举长度(设 \(L=r-l+1\))有:

\[\left(\sum_{k=1}^L \binom{L}{k}\frac{k}{L}(\frac{1}{k}-\frac{1}{k^2})\right)\sum a_i^2-\left(\sum_{k=1}^L \binom{L}{k}\frac{k(k-1)}{L(L-1)}\frac{1}{k^2}\right)\sum_{i\neq j}a_ia_j\\
=\left(\sum_{k=1}^L \binom{L-1}{k-1}(\frac{1}{k}-\frac{1}{k^2})\right)\sum a_i^2-\left(\sum_{k=1}^L \binom{L-2}{k-2}\frac{1}{k^2}\right)\sum_{i\neq j}a_ia_j\\
=\left(\sum_{k=0}^{L-1} \binom{L-1}{k}(\frac{1}{k+1}-\frac{1}{(k+1)^2})\right)\sum a_i^2-\left(\sum_{k=0}^{L-2} \binom{L-2}{k}\frac{1}{(k+2)^2}\right)\sum_{i\neq j}a_ia_j\\
\]

很显然,知道这两个大的括号括起来的东西就可以了。容易知道 \(\sum a_i^2\) 和 \(\sum_{i\neq j}a_ia_j\),其中

\[\sum_{i\neq j}a_ia_j=\left(\sum a_i\right)^2-\sum a_i^2
\]

据 EI 说,这一类超几何项求和式有某类共性,但是我不知道。

先处理前一半。

\[A_L=\sum _k\binom{L-1}{k}\frac{1}{k+1}\\
=\sum _k\binom{L-1}{k}\int_0^1x^kdx=\int_0^1\sum_k \binom{L-1}{k}x^kdx\\
A_L=\int _0^1(x+1)^{L-1}dx=\frac{(x+1)^L}{L}\bigg|_0^1=\frac{2^L-1}{L}
\]

再次尝试用这个办法干

\[B_L=\sum_k \binom{L-1}{k}\frac{1}{(k+1)^2}\\
=\sum_k \binom{L-1}{k}\frac{1}{k+1}\int _0^1x^kdx\\
=\sum_k \binom{L-1}{k}\int_0^1x^k\int_0^1y^kdydx\\
=\int _0^1\int_0^1\sum_k\binom{L-1}{k}x^ky^kdydx\\
=\int_0^1\int_0^1(xy+1)^{L-1}dydx\\
=\int_0^1\frac{(x+1)^L-1}{Lx}dx\\
\]

看起来有点抽象。

\[B_L=\int_0^1\frac{(x+1)^{L+1}-(x+1)}{Lx(x+1)}dx\\
=\int_1^2\frac{u^{L+1}-u}{L(u-1)u}du=\int_1^2\frac{u^{L}-1}{L(u-1)}du\\
=\frac{1}{L}\int_1^2\sum _{i=0}^{L-1}u^idu\\
=\frac{1}{L}\sum _{i=1}^{L}\int_0^1(x+1)^{i-1}dx\\
\]

这,就不抽象了吧?

\[B_L=\frac{1}{L}\sum_{i=1}^LA_i
\]

接下来是后半部分。

\[C_L=\sum_{k=0}^{L-2} \binom{L-2}{k}\frac{1}{k+2}\\
=\sum _k\binom{L-2}{k}\int_0^1x^{k+1}dx\\
=\int_0^1x\sum_k\binom{L-2}{k}x^kdx\\
C_L=\int _0^1x(x+1)^{L-2}dx\\
=\int_0^1xd\left(\frac{(x+1)^{L-1}}{L-1}\right)\\
=\frac{x(x+1)^{L-1}}{L-1}\bigg|_{0}^1-\int_0^1\frac{(x+1)^{L-1}}{L-1}dx\\
=\frac{2^{L-1}}{L-1}-\frac{1}{L-1}\int_0^1(x+1)^{L-1}dx\\
=\frac{2^{L-1}-A_L}{L-1}
\]

其实后几步可以省略因为没用。

虽然接下来的部分没有新意,但是我还是愿意将过程和结果展示在这里方便直接拿走(谁愿意进行这些体力劳动呢?)

\[D_L=\sum_{k=0}^{L-2} \binom{L-2}{k}\frac{1}{(k+2)^2}\\
=\sum_{k=0}^{L-2} \binom{L-2}{k}\frac{1}{(k+2)}\int _0^1x^{k+1}dx\\
=\sum_{k=0}^{L-2} \binom{L-2}{k}\int _0^1x^{k+1}\int _0^1y^{k+1}dydx\\
=\int _0^1\int _0^1xy\sum_{k=0}^{L-2} \binom{L-2}{k}x^ky^{k}dydx\\
=\int _0^1\frac{1}{x}\int _0^1xy(xy+1)^{L-2}d(xy)dx\\
=\int_0^1\frac{1}{x}\left(\int_0^xy(y+1)^{L-2}dy\right)dx\\
=\int_0^1\frac{Lx(x+1)^{L-1}-(x+1)^L+1}{xL(L-1)}dx\\
=\int _0^1\frac{(x+1)^{L-1}}{L-1}dx-\frac{1}{(L-1)}\int_0^1\frac{(x+1)^L-1}{Lx}dx\\
=\frac{A_L-B_L}{L-1}
\]

原式等于

\[(A_L-B_L)\sum a_i^2-D_L\sum_{i\neq j}a_ia_j\\
\]
// Problem: P6108 [Ynoi2009] rprsvq
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P6108
// Memory Limit: 500 MB
// Time Limit: 1500 ms
// UOB Koala
//
// Powered by CP Editor (https://cpeditor.org) #include<bits/stdc++.h>
using namespace std;
bool mst;
const int maxn=5e6+5,mod=998244353;
namespace IO{
inline char gc(){
static const int Rlen=1<<22|1;static char buf[Rlen],*p1,*p2;
return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,Rlen,stdin),p1==p2)?EOF:*p1++;
}
template<typename T>T get_integer(){
char c;bool f=false;while(!isdigit(c=gc()))f=c=='-';T x=c^48;
while(isdigit(c=gc()))x=((x+(x<<2))<<1)+(c^48);return f?-x:x;
}
inline int gi(){return get_integer<int>();}
inline int get_s(char *s){
int len=0;char c;while(isspace(c=gc()));
while(s[len++]=c,!isspace(c=gc())&&c!=EOF);
s[len]=0;return len;
}
template<typename T>T get_float(){
char c;bool f=false;while(!isdigit(c=gc()))f=c=='-';T x=c^48;
while(isdigit(c=gc()))x=(x*10)+(c^48);if(c!='.')return f?-x:x;
T y=1.;while(isdigit(c=gc()))x+=(y/=10)*(c^48);return f?-x:x;
}
char obuf[(int)(4e7+7)],*oh=obuf;
inline void prt(char c){*oh++=c;}
inline void prt(const char *s){
while(*s)*oh++=*s++;
}
template<typename T>void prt(T a){
static char ch[23];int tl=0;
if(a<0)*oh++='-',a=-a;
do ch[++tl]=a%10;while(a/=10);
while(tl)*oh++=ch[tl--]^48;
}
template<typename T,class ...Args>
void prt(T a,Args...args){
prt(a),prt(args...);
}
struct obuf_flusher{
~obuf_flusher(){fwrite(obuf,1,oh-obuf,stdout);}
}Flusher;
}
using namespace IO;
int qp(int a,int b){
if(b==0)return 1;
int T=qp(a,b>>1);T=1ll*T*T%mod;
if(b&1)return 1ll*T*a%mod;
return T;
}
#define ls (k<<1)
#define rs (k<<1|1)
#define mid ((l+r)>>1)
int xds[maxn<<2],xds2[maxn<<2],add[maxn<<2];
int A[maxn],B[maxn],D[maxn],n,m;
void pushup(int k){
xds[k]=(xds[ls]+xds[rs])%mod;
xds2[k]=(xds2[ls]+xds2[rs])%mod;
}
void ADD(int k,int l,int r,int v){
int L=r-l+1;
int s1=(xds[k]+1ll*L*v%mod)%mod;
int s2=(xds2[k]+2ll*xds[k]*v%mod+1ll*L*v%mod*v%mod)%mod;
xds[k]=s1,xds2[k]=s2;
(add[k]+=v)%=mod;
}
void pushdown(int k,int l,int r){
if(!add[k])return ;
ADD(ls,l,mid,add[k]);
ADD(rs,mid+1,r,add[k]);
add[k]=0;
}
void modify(int k,int l,int r,int x,int y,int v){
if(x<=l&&r<=y)return ADD(k,l,r,v);
pushdown(k,l,r);
if(x<=mid)modify(ls,l,mid,x,y,v);
if(mid<y)modify(rs,mid+1,r,x,y,v);
pushup(k);
}
#define PI pair<int,int>
PI operator +(const PI &a,const PI &b){
return {(a.first+b.first)%mod,(a.second+b.second)%mod};
}
PI query(int k,int l,int r,int x,int y){
if(x<=l&&r<=y)return {xds[k],xds2[k]};
PI res={0,0};
pushdown(k,l,r);
if(x<=mid)res=res+query(ls,l,mid,x,y);
if(mid<y)res=res+query(rs,mid+1,r,x,y);
return res;
}
bool med;
int fac[maxn],ifac[maxn],inv[maxn];
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
// cerr<<(&mst-&med)/1024.0/1024.0<<endl;
n=gi(),m=gi();
fac[0]=1;
for(int i=1;i<=n;i++){
fac[i]=1ll*fac[i-1]*i%mod;
}
ifac[n]=qp(fac[n],mod-2);
for(int i=n-1;i>=0;i--)ifac[i]=1ll*(i+1)*ifac[i+1]%mod;
for(int i=1;i<=n;i++)inv[i]=1ll*ifac[i]*fac[i-1]%mod;
int p2=1;
for(int i=1;i<=n;i++){
p2=p2*2%mod;
A[i]=1ll*(p2-1+mod)%mod*inv[i]%mod;
}
int S=0;
for(int i=1;i<=n;i++){
(S+=A[i])%=mod;
B[i]=1ll*inv[i]*S%mod;
D[i]=1ll*(A[i]-B[i]+mod)%mod*inv[i-1]%mod;
}
for(int i=1;i<=m;i++){
int tp,x,y,v;
tp=gi(),x=gi(),y=gi();
if(tp==1){
v=gi();
modify(1,1,n,x,y,v);
}else{
int L=y-x+1;
PI G=query(1,1,n,x,y);
int s1=G.second,s2=(1ll*G.first*G.first-G.second+mod)%mod;
int res=(1ll*(A[L]-B[L]+mod)%mod*s1%mod-1ll*D[L]*s2%mod+mod)%mod;
prt(res,"\n");
}
}
return 0;
}

P6108 [Ynoi2009] rprsvq 积分题解的更多相关文章

  1. poj 1390 区间dp

    Blocks Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5035   Accepted: 2065 Descriptio ...

  2. HDU-6290 奢侈的旅行 (Dijkstra+堆优化)

    高玩小Q不仅喜欢玩寻宝游戏,还喜欢一款升级养成类游戏.在这个游戏的世界地图中一共有nn个城镇,编号依次为11到nn.这些城镇之间有mm条单向道路,第ii 条单项道路包含四个参数ui,vi,ai,biu ...

  3. 2018HPU暑期集训第四次积分训练赛 K - 方框 题解(图形打印)

    思路分析:题目已经明确透露了这道题的解法:就是画框.当 输入的边长  的话,就表示可以在内层继续嵌套一个方框.废话就不多说了,直接上代码吧! 代码如下: #include <iostream&g ...

  4. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  5. HDU 5826 physics (积分推导)

    physics 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5826 Description There are n balls on a smoo ...

  6. HDU 2493 Timer 数学(二分+积分)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2493 题意:给你一个圆锥,水平放置,圆锥中心轴与地面平行,将圆锥装满水,在圆锥某一表面开一个小洞,流出来 ...

  7. HDU1071 The area 【积分】

    The area Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  8. “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】

    黑白图像直方图 发布时间: 2017年7月9日 18:30   最后更新: 2017年7月10日 21:08   时间限制: 1000ms   内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...

  9. 【自适应辛普森积分】hdu1724 Ellipse

    Ellipse Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  10. SDOI2017 Round2 详细题解

    这套题实在是太神仙了..做了我好久...好多题都是去搜题解才会的 TAT. 剩的那道题先咕着,如果省选没有退役就来填吧. 「SDOI2017」龙与地下城 题意 丢 \(Y\) 次骰子,骰子有 \(X\ ...

随机推荐

  1. Java 并发编程实战学习笔记——寻找可强化的并行性

    寻找可强化的并行性 1.串行执行所有任务 代码 复制 - 运行 package net.jcip.examples; import java.util.*; /** * SingleThreadRen ...

  2. k8s之基础篇

    相关概念: kube-apierver: 控制平面组件,负责kubernetes api, 处理接受的请求工作 kube-controller-manager: 控制平面组件, 负责运行控制器进程 k ...

  3. BigDecimal数据处理方法总结

    前言 ‌BigDecimal是Java编程语言中位于java.math包中的一个类,主要用于进行高精度的十进制数计算‌.它提供了对任意精度的十进制数进行精确计算的能力,适用于需要保持精度和执行准确计算 ...

  4. Shiro简单入门+个人理解(3)

    最后一天,对shiro框架的应用也到此为至了,可能不是太全,但相对于一般的项目,它的作用已经使用了很多了 Shiro的授权: 授权:对用户资源访问的授权(是否允许用户访问此资源) 用户访问系统资源时的 ...

  5. PHP 简易的BASE64加密

    有这样一个有趣的公式:x<100;  (x*53*17)%100 = x;这个公司的原理:53*17=901,x*901,的数后2位数还是x:任何符合 a * b = 100 * n +1 的值 ...

  6. "有邻"创始人:APP覆盖杭州千余小区 却还没认真想过赚钱的事

    "远亲不如近邻",常被社区经济"掘金者"拿来做开场语. 在杭州,有不少互联网创业企业在深挖社区经济,例如社区O2O服务平台.杨仁斌也看中了"社区&qu ...

  7. MySQL语句判断数据库数据重复情况,新增、删除、不变。

    判断 7月8月两个月数据对比情况,新增.删除(离职).重复. 根据manager_name,gg_name,employer,department,historical_office判断出是否重复数据 ...

  8. Qt编写的项目作品14-智能安防集中管理平台

    一.功能特点 同时集成了楼宇对讲.住户报警.门禁控制.公共报警.视频监控等模块. 系统管理部分包括系统配置.对讲配置.住户配置.公共配置.监控配置.地图管理.视频联动.用户管理.区域管理. 图形化的实 ...

  9. 即时通讯框架MobileIMSDK的H5端开发快速入门

    ► 相关链接: ① MobileIMSDK-H5端的详细介绍 ② MobileIMSDK-H5端的开发手册new(* 精编PDF版) 一.技术准备 您是否已对Web端即时通讯技术有所了解? 1)新手入 ...

  10. SpringBoot进阶教程(八十四)spring-retry

    在日常的一些场景中, 很多需要进行重试的操作.而spring-retry是spring提供的一个基于spring的重试框架,某些场景需要对一些异常情况下的方法进行重试就会用到spring-retry. ...