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 l≤i≤r 执行 a i ← x a_i\gets x ai←x.? 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=l∑rai×(i−l+1)k)mod(109+7).
Limitations
1
≤
n
,
q
≤
10
5
1\le n,q\le 10^5
1≤n,q≤105
1
≤
l
≤
r
≤
n
1\le l\le r\le n
1≤l≤r≤n
0
≤
a
i
,
x
≤
10
9
0\le a_i,x\le 10^9
0≤ai,x≤109
0
≤
k
≤
5
0\le k\le 5
0≤k≤5
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=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)
预处理
(
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=l∑rai×(i+1)j 即可,剩下的查询时暴算.
时间复杂度
O
(
k
q
log
n
)
O(kq\log n)
O(kqlogn).
387

被折叠的 条评论
为什么被折叠?



