/ Vijos / 题库 /

持久化线段树[2]

持久化线段树[2]

时间限制:1秒  内存限制:256M


【题目描述】

  现在给你一个整数序列:\(A[1],A[2],…,A[N]\),你需要实现下列几种操作:

  \(C\ l\ r\ d\):把 \(A[l]..A[r]\) 每个元素加 \(d\),并且时间计数器 timestamp 增加 1。

  \(Q\ l\ r\):查询当前序列中 \(A[l]+A[l+1]+...+A[R]\) 和。

  \(H\ l\ r\ t\):查询时刻 \(t\) 时的序列中 \(A[l]+A[l+1]+...+A[R]\) 和。

  \(B\ t\):回到时刻 \(t\) 时的序列状态。一旦你决定回到过去,你就永远无法再进入该时刻之后的版本了。

  最开始,时间计数器timestamp=0,即时刻 0,第一次修改,则时间计数器变为 1。

【输入格式】

  第一行 \(N,M\),表示序列长度和操作数目。
  第二行是序列 \(A[1]..A[N]\)。
  再接下来的 \(M\) 行,每行一条操作命令,你应认为每条操作都是合法的。

【输出格式】

  输出每次的查询结果。

【输入输出样例】

 Input

Input 1:
10 5
1 2 3 4 5 6 7 8 9 10
Q 4 4
Q 1 10
Q 2 4
C 3 6 3
Q 2 4

Input 2:
2 4
0 0
C 1 1 1
C 2 2 -1
Q 1 2
H 1 2 1

 Output

Output 1:
4
55
9
15

Output 1:
0
1

【数据限制】

  对于 \(100\%\) 的数据,N, M ≤ 10^5, |A[i]| ≤ 10^9, 1 ≤ l ≤ r ≤ N, |d| ≤ 10^4$

【来源】

  Mr.he

信息

ID
2577
难度
9
分类
数据结构 | 线段树 点击显示
标签
(无)
递交数
2
已通过
1
通过率
50%
被复制
1
上传者