#xDSybttg040302. 1548:【例 2】A Simple Problem with Integers
1548:【例 2】A Simple Problem with Integers
题目描述
这是一道模板题。
给定数列 ,你需要依次进行 个操作,操作有两类:
1 l r x:给定 ,对于所有 ,将 加上 ;2 l r:给定 ,求 的值。
输入格式
第一行包含 个正整数 ,表示数列长度和询问个数。
第二行包含 个整数 ,表示初始数列。
接下来 行,每行一个操作,格式为:
1 l r x2 l r
输出格式
对于每个 2 l r 操作,输出一行一个整数,表示区间和。
样例
输入样例 1
5 10
2 6 6 1 1
2 1 4
1 2 5 10
2 1 3
2 2 3
1 2 2 8
1 2 3 7
1 4 4 10
2 1 2
1 4 5 6
2 3 4
输出样例 1
15
34
32
33
50
样例解释
初始数列:
- 第一个操作
2 1 4:询问区间 的和 = 。 - 第二个操作
1 2 5 10:将 加 ,数列变为 。 - 第三个操作
2 1 3:询问 的和 = 。 - 第四个操作
2 2 3:询问 的和 = 。 - 第五个操作
1 2 2 8:将第 个元素加 ,数列变为 。 - 第六个操作
1 2 3 7:将 加 ,数列变为 。 - 第七个操作
1 4 4 10:将第 个元素加 ,数列变为 。 - 第八个操作
2 1 2:询问 的和 = 。 - 第九个操作
1 4 5 6:将 加 ,数列变为 。 - 第十个操作
2 3 4:询问 的和 = 。
数据范围
时间限制:5000 ms
内存限制:524288 KB
提示
请使用高效的算法实现,建议使用树状数组(Fenwick Tree)或线段树(Segment Tree)的懒标记(Lazy Propagation)版本,以支持区间修改和区间查询。
输入输出量较大,建议使用快速的输入输出方式(例如 scanf / printf 或关闭同步的 cin / cout)。