差分是前缀和的逆运算,对于一个数组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;
}