等差数列差分问题描述:
一开始1~n范围上的数字都是0。接下来一共有m个操作。
每次操作:l~r范围上依次加上首项s、末项e、公差d的数列
最终1~n范围上的每个数字都要正确得到
等差数列差分的过程:
每个操作调用set方法
所有操作完成后在arr上生成两遍前缀和,即调用build方法
arr里就是最终1~n范围上的每个数字
模版
void set(int l, int r, int s, int e, int d) {
arr[l] += s;
arr[l + 1] += d - s;
arr[r + 1] -= d + e;
arr[r + 2] += e;
}
void build() {
for (int i = 1; i <= n; i++) {
arr[i] += arr[i - 1];
}
for (int i = 1; i <= n; i++) {
arr[i] += arr[i - 1];
}