1,一维前缀和
#include <bits/stdc++.h>
using namespace std;
int n,m,a[100005],s[100005],l,r;
int main(){
cin>>n>>m;
s[0]=0;
for(int i=1;i<=n;i++){
cin>>a[i];
s[i]=s[i-1]+a[i];
}
for(int i=1;i<=m;i++){
cin>>l>>r;
cout<<s[r]-s[l-1]<<endl;
}
}
2,二维前缀和
#include <bits/stdc++.h>
using namespace std;
int n,m,q,a[1005][1005],s[1005][1005],x1,yy,x2,y2;
int main(){
s[0][0]=0;
for(int i=0;i<=1000;i++){
s[0][i]=s[i][0]=0;
}
cin>>n>>m>>q;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
}
}
for(int i=1;i<=q;i++){
cin>>x1>>yy>>x2>>y2;
cout<<s[x2][y2]-s[x1-1][y2]-s[x2][yy-1]+s[x1-1][yy-1];
}
}
3,一维差分
#include <bits/stdc++.h>
using namespace std;
int n,m,a[100005],l,r,c,d[100005],ans=0;
int main(){
cin>>n>>m;
a[0]=0;
for(int i=1;i<=n;i++){
cin>>a[i];
d[i]=a[i]-a[i-1];
}
for(int i=1;i<=m;i++){
cin>>l>>r>>c;
d[l]+=c;
d[r+1]-=c;
}
for(int i=1;i<=n;i++){
ans+=d[i];
cout<<ans<<" ";
}
}
4、二维差分
#include <bits/stdc++.h>
using namespace std;
int n,m,q,x1,yy,x2,y2,c,a[1005][1005],d[1005][1005];
void insert(int a,int b,int e,int f,int g){
d[a][b]+=g;
d[e+1][b]-=g;
d[a][f+1]-=g;
d[e+1][f+1]+=g;
}
int main(){
cin>>n>>m>>q;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
insert(i,j,i,j,a[i][j]);
}
}
for(int i=1;i<=q;i++){
cin>>x1>>yy>>x2>>y2>>c;
insert(x1,yy,x2,y2,c);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
d[i][j]+=d[i-1][j]+d[i][j-1]-d[i-1][j-1];
cout<<d[i][j]<<" ";
}
cout<<endl;
}
}