#3563. 数列操作 (树状数组/线段树 模板题)
数列操作 (树状数组/线段树 模板题)
数列操作 (树状数组/线段树 模板题)
题目描述
给定一个长度为 的整数数列,需要支持以下两种操作共 次:
- 修改操作:将数列中第 个元素的值加上 。
- 查询操作:求子数列 的连续和。
数列的元素个数最多为 ,操作次数最多为 。
输入格式
第一行包含两个整数 和 ,分别表示数列的长度和操作的次数。
第二行包含 个整数,表示初始的数列。
接下来 行,每行包含三个整数 ,含义如下:
- 若 ,表示查询子数列 的连续和。
- 若 ,表示将第 个元素的值加上 。
输出格式
对于每个 的查询操作,输出一行一个整数,表示对应的子数列 的连续和。
输入输出样例
样例输入
10 5
1 2 3 4 5 6 7 8 9 10
1 1 5
0 1 3
0 4 8
1 7 5
0 4 8
样例输出
11
30
35
样例说明
初始数列:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
1 1 5:第 1 个元素加 5,数列变为[6, 2, 3, 4, 5, 6, 7, 8, 9, 10]0 1 3:查询区间 的和,即0 4 8:查询区间 的和,即1 7 5:第 7 个元素加 5,数列变为[6, 2, 3, 4, 5, 6, 12, 8, 9, 10]0 4 8:查询区间 的和,即
数据范围与约定
- 对于 的数据:
- 数列中每个元素的绝对值不超过
- 每次操作加上的数值 的绝对值不超过
- 保证查询操作的区间合法,即
提示
本题是经典的 单点修改 + 区间查询 问题,可以使用以下数据结构解决:
- 树状数组(Fenwick Tree):时间复杂度 每次操作,常数小,代码简洁
- 线段树(Segment Tree):时间复杂度 每次操作,功能更强大
注意答案可能超过 32 位整数范围,建议使用 64 位整数 (long long ) 存储。
本题为树状数组/线段树的模板题,适合初学者练习。
相关
在下列比赛中: