#YHMB0035. [模板] 线段树1
[模板] 线段树1
P3372 【模板】线段树 1
题目描述
如题,已知一个数列 ,你需要进行下面两种操作:
- 将某区间每一个数加上 。
- 求出某区间每一个数的和。
输入格式
第一行包含两个整数 ,分别表示该数列数字的个数和操作的总个数。
第二行包含 个用空格分隔的整数 ,其中第 个数字表示数列第 项的初始值。
接下来 行每行包含 或 个整数,表示一个操作,具体如下:
1 x y k
:将区间 内每个数加上 。2 x y
:输出区间 内每个数的和。
输出格式
输出包含若干行整数,即为所有操作 2 的结果。
输入输出样例 #1
输入 #1
5 5
1 5 4 2 3
2 2 4
1 2 3 2
2 3 4
1 1 5 1
2 1 4
输出 #1
11
8
20
说明/提示
对于 的数据:,。
对于 的数据:,。
对于 的数据:, 为正数,且任意时刻数列的和不超过 。
【样例解释】
操作次数 | 输入内容 | 操作类型 | 数列变化(操作后数列) | 输出结果 |
---|---|---|---|---|
0 | - | 初始状态 | [1, 5, 4, 2, 3] |
- |
1 | 2 2 4 |
求区间 [2, 4] (数列第 2 - 4 项,对应值 5, 4, 2 )所有数的和 |
数列不变,仍为 [1, 5, 4, 2, 3] |
和为 5 + 4 + 2 = 11 |
2 | 1 2 3 2 |
将区间 [2, 3] (数列第 2 - 3 项,值 5, 4 )内所有数加 2 |
操作后数列为 [1, 7, 6, 2, 3] |
- |
3 | 2 3 4 |
求区间 [3, 4] (数列第 3 - 4 项,值 6, 2 )所有数的和 |
数列不变,为 [1, 7, 6, 2, 3] |
和为 6 + 2 = 8 |
4 | 1 1 5 1 |
将区间 [1, 4] (数列第 1 - 4 项,值 1, 7, 6, 2 )内所有数加 1 |
操作后数列为 [2, 8, 7, 3, 3] (原表格此处数列第 5 项可能笔误,按逻辑应为 3 ,若按表格显示是 4 ,则以表格为准,操作后为 [2, 8, 7, 3, 4] ) |
- |
5 | 2 1 4 |
求区间 [1, 4] (数列第 1 - 4 项,值 2, 8, 7, 3 )所有数的和 |
数列不变,为 [2, 8, 7, 3, 4] |
和为 2 + 8 + 7 + 3 = 20 |