CF266E More Queries to Array... Solution
Description
给定序列 a=(a1,a2,⋯,an)a=(a_1,a_2,\cdots,a_n)a=(a1,a2,⋯,an),执行 qqq 次操作分两种:
= l r x
:对每个 l≤i≤rl\le i\le rl≤i≤r 执行 ai←xa_i\gets xai←x.? l r k
:求 (∑i=lrai×(i−l+1)k)mod(109+7)(\sum\limits_{i=l}^r a_i\times (i-l+1)^k)\bmod (10^9+7)(i=l∑rai×(i−l+1)k)mod(109+7).
Limitations
1≤n,q≤1051\le n,q\le 10^51≤n,q≤105
1≤l≤r≤n1\le l\le r\le n1≤l≤r≤n
0≤ai,x≤1090\le a_i,x\le 10^90≤ai,x≤109
0≤k≤50\le k\le 50≤k≤5
5s,256MB5\text{s},256\text{MB}5s,256MB
Solution
直接维护答案式子是不大现实的.
考虑拆开,由二项式定理得:
原式=∑i=lrai×(∑j=0k(kj)×(i+1)j×(−l)k−j)=∑j=0k(kj)×(−l)k−j×(∑i=lrai×(i+1)j)\begin{aligned} \text{原式}&=\sum_{i=l}^r a_i \times (\sum_{j=0}^k\binom{k}{j}\times (i+1)^j\times(-l)^{k-j})\\ &=\sum_{j=0}^k\binom{k}{j}\times(-l)^{k-j}\times (\sum_{i=l}^r a_i \times (i+1)^j) \end{aligned} 原式=i=l∑rai×(j=0∑k(jk)×(i+1)j×(−l)k−j)=j=0∑k(jk)×(−l)k−j×(i=l∑rai×(i+1)j)
预处理 (kj)\binom{k}{j}(jk),线段树维护 S=∑i=lrai×(i+1)jS=\sum\limits_{i=l}^r a_i \times (i+1)^jS=i=l∑rai×(i+1)j 即可,剩下的查询时暴算.
时间复杂度 O(kqlogn)O(kq\log n)O(kqlogn).
Submisson