差分是前缀和的逆运算,对于一个数组a,其差分数组b的每一项都是a [ i ]和前一项a [ i − 1 ]的差。
**注意:**差分数组和原数组必须分开存放!!!!
#include <iostream>
using namespace std;
typedef long long ll;
const int maxn = 1e5+10;
ll a[maxn],s[maxn];
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) s[i] = a[i]-a[i-1]; //读入并计算差分数组
while(m--)
{
int l,r,c; cin>>l>>r>>c;
s[l]+=c;
s[r+1]-=c;
}
for(int i=1;i<=n;i++)
{
s[i]+=s[i-1];
cout<<s[i]<<" ";
}
return 0;
}