CF266E More Queries to Array... Solution

Description

给定序列 a = ( a 1 , a 2 , ⋯   , a n ) a=(a_1,a_2,\cdots,a_n) a=(a1,a2,,an),执行 q q q 次操作分两种:

  • = l r x:对每个 l ≤ i ≤ r l\le i\le r lir 执行 a i ← x a_i\gets x aix.
  • ? l r k:求 ( ∑ i = l r a i × ( i − l + 1 ) k )   m o d   ( 10 9 + 7 ) (\sum\limits_{i=l}^r a_i\times (i-l+1)^k)\bmod (10^9+7) (i=lrai×(il+1)k)mod(109+7).

Limitations

1 ≤ n , q ≤ 10 5 1\le n,q\le 10^5 1n,q105
1 ≤ l ≤ r ≤ n 1\le l\le r\le n 1lrn
0 ≤ a i , x ≤ 10 9 0\le a_i,x\le 10^9 0ai,x109
0 ≤ k ≤ 5 0\le k\le 5 0k5
5 s , 256 MB 5\text{s},256\text{MB} 5s,256MB

Solution

直接维护答案式子是不大现实的.

考虑拆开,由二项式定理得:
原式 = ∑ i = l r a i × ( ∑ j = 0 k ( k j ) × ( i + 1 ) j × ( − l ) k − j ) = ∑ j = 0 k ( k j ) × ( − l ) k − j × ( ∑ i = l r a i × ( 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=lrai×(j=0k(jk)×(i+1)j×(l)kj)=j=0k(jk)×(l)kj×(i=lrai×(i+1)j)

预处理 ( k j ) \binom{k}{j} (jk),线段树维护 S = ∑ i = l r a i × ( i + 1 ) j S=\sum\limits_{i=l}^r a_i \times (i+1)^j S=i=lrai×(i+1)j 即可,剩下的查询时暴算.
时间复杂度 O ( k q log ⁡ n ) O(kq\log n) O(kqlogn).

Submisson

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值