AcWing 797. 差分 【c++详细题解】 - AcWing
差分在解决一个数组[l,r]中间的每个元素全部加上一个常数c的问题上有很大的优势,差分是前缀和的逆运算,在实际解题过程中,往往差分和前缀和同时使用。
#include<iostream>
#include<algorithm>
using namespace std;
int n, m, l, r, c;
int a[100001];
int b[100001];
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
cin >> a[i];//注意始终原数组是a
b[i] = a[i] - a[i - 1];//我们只是想办法构建一个b数组,然后在b数组的基础上去加常数
}
while (m--)
{
cin >> l >> r >> c;
b[l] += c;
b[r + 1] -= c;//打补丁
}
for (int i = 1; i <= n; i++)
{
a[i] = a[i - 1] + b[i];//实际上这里就是在求新的数组了,前缀和的操作
cout << a[i] << " ";
}
return 0;
}