一维差分
#include<bits/stdc++.h>
using namespace std;
const int N=100000+2;
int a[N],b[N];
int n,m;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>b[i];
for(int i=1;i<=n;i++) a[i]+=b[i],a[i+1]-=b[i];
while(m--){
int l,r,c;
cin>l>>r>>c;
a[l]+=c,a[r+1]-=c;
}
long long ans=0;
for(int i=1;i<=n;i++){
ans+=a[i];
cout<<ans<<" ";
}
return 0;
}
二维差分
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
long long a[N][N];
long long b[N][N];
void add(int x1,int y1,int x2,int y2,int k){
b[x1][y1]+=k;
b[x2+1][y1]-=k;
b[x1][y2+1]-=k;
b[x2+1][y2+1]+=k;
}
int main(){
int n,m,q;
cin>>n>>m>>q;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>a[i][j];
add(i,j,i,j,a[i][j]);
}
while(q--){
int x1,y1,x2,y2,k;
cin>>x1>>y1>>x2>>y2>>k;
add(x1,y1,x2,y2,k);
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
b[i][j]+=b[i-1][j]+b[i][j-1]-b[i-1][j-1];
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
cout<<b[i][j]<<' ';
cout<<endl;
}
return 0;
}