CDQZ 数据结构 1004
Challenge 4
题意
\(10^5\)的序列,你需要支持以下三种操作
1.M pos v 把\(a_pos=v\)
2.A l r
\(\sum_{i \in l\left [l,r \right )}{a_i \cdot a_{i+1}}\)
3.Q l r
\(\sum_{i<j}{a_i \cdot a_{j}}\)
Sample Input
5 5
1 2 3 4 5
Q 1 5
A 1 5
M 2 7
Q 1 5
A 1 5
Sample Output
85
40
150
60
Solutiion
一看就是简单的线段树
- M 操作线段基础点修改
- A 的话维护一个区间相邻积
- Q 操作本题的唯一难点: 维护一个区间和,一个区间平方和。我们有
\(2 \cdot \sum_{l\leq i<j\leq r}{a_i \cdot a_{j}}=(\sum_{i=l}^r{a_i})^2 -\sum_{i=l}^r{a_i^2}\)
然而需要注意的是我们不能直接除以2,因为本题是模意义下的.你需要先求一个1000000007对于2的逆元。由Fermat Theory我们有\(2^{1000 000 007-2}\)是逆元
sourcecode