您的位置:首页 > 理论基础 > 数据结构算法

CDQZ 数据结构 1004

2015-07-12 19:53 183 查看

#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: