题目描述
维护一个长度为 n 的数列 a,支持两种操作:
历史和定义为数列 hi 的区间和:初始 hi=ai,在每次操作(修改或查询,具体可参考样例解释)完成后,对所有 hi←hi+ai。
输入格式
第一行两个数 n,m,表示长度为 n 的有序序列和 m 个操作。
第二行有 n 个数,表示有序序列 ai。
下面有 m 行,每行第一个数表示操作类型:
- 之后有三个数 l,r,x 表示将在区间 [l,r] 之间的值都加上 x;
- 之后有两个数 l,r 表示查询区间 [l,r] 的历史和。
输出格式
对于每个操作 2 各输出一行,表示查询结果。
5 6
5 2 13 12 9
2 3 5
1 1 3 17
2 1 2
2 1 4
2 4 5
1 4 5 9
34
55
230
105
样例 1 解释
初始 h 序列为 {5,2,13,12,9}。
操作 2 3 5 虽然是询问操作,但仍然会更新 hi←hi+ai,更新结果为:{10,4,26,24,18}。注意更新在回答询问之后,即询问仍然是更新前 h 的区间和。
操作 1 1 3 17 之后,序列 a 为 {22,19,30,12,9},h 更新后为 {32,23,56,36,27}。
操作 2 1 2 即求此时的 h1+h2,答案即为 32+23=55。回答完该询问后更新 h,更新结果为 {54,42,86,48,36}。
10 10
8 9 2 6 2 8 8 3 10 6
1 7 9 8
2 2 6
2 1 8
2 8 10
1 3 8 10
2 5 8
2 8 9
1 8 9 1
2 5 10
2 5 6
54
170
124
246
207
687
200
数据规模与约定
- 对于 15% 的数据,n,m≤20;
- 对于 50% 的数据,n,m≤3000;
- 对于 100% 的数据,1≤n,m≤105,−1000≤ai,x≤1000。