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

转载于:https://www.cnblogs.com/yeguanghao/p/4641420.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值