时间树

时间树

背景故事

第三讲师郑老板在模拟一颗线段树,但粗心的他总是不小心将数据输错。
为了避免浪费时间,他决定使用时间回档,回到过去来修改错误。
但粗心的他又可能会在时间回档时出错。
现在头脑混乱的他已经完成不了线段树了,所以向你请求帮助。

问题描述

郑老板给出n个整数 \( a_1, a_2, …, a_n \) 。对于这些整数,郑老板进行了以下操作,需要你来帮助他实现:
1. C l r d: 对于从\(l\)到\(r\)的每一个元素,添加一个常数\(d\),并将时间\(+1\),注意:这是唯一的会导致时间增加的操作。
2. Q l r: 询问当前从\(l\)到\(r\)的元素的值的总和。
3. B t: 返回时间\(t\)的状态。但是一旦你回到时间\(t\),你就不能返回\(t\)之后的时间。
数据范围:\( n,m \leq 10^5 \), \( |a_i| \leq 10^4 \), \( 1 \leq l \leq r \leq N \) , \( |d| \leq 10^4 \) 。
系统是从时间\(0\)开始的,第一次修改是在时间\(1\),\( t \geq 0 \),如果\(t\)是在未来,则时间回档失败,不改变时间。

输入格式

第一行有两个整数\(n,m\)分别表示总点数和总时间。
第二行有\(n\)个整数分别为\( a_1 a_2 … a_n \)
接下来\(m\)行是\(m\)个操作。

输出格式

对于每一个询问,输出对应的结果。

部分分

对于30%的数据,\( n,m \leq 100 \)
对于50%的数据,\( n,m \leq 1000 \)
对于70%的数据,\( n,m \leq 10000 \)
对于100%的数据,\( n,m \leq 100000 \)

Sample 1

Input

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

Output

27
42
45
15

时空限制

1s
256MB

信息

ID
1005
难度
9
分类
(无)
标签
(无)
递交数
11
已通过
3
通过率
27%
被复制
1
上传者