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

一看就是简单的线段树

  1. M 操作线段基础点修改
  2. A 的话维护一个区间相邻积
  3. 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
posted @ 2015-07-12 19:53  yeguanghao  阅读(288)  评论(0编辑  收藏  举报