一维前缀和
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int N=100010;
int n,q;
int g[N],f[N];
int main(){
cin>>n>>q;
for(int i=1;i<=n;i++){
cin>>g[i];
}
for(int i=1;i<=n;i++){
f[i]=f[i-1]+g[i];
}
while(q--){
int x,y;
cin>>x>>y;
cout<<f[y]-f[x-1]<<endl;
}
return 0;
}
二维前缀和
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int N=1009;
int n,m,q;
int g[N][N],f[N][N];
int main(){
cin>>n>>m>>q;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>g[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
f[i][j]=f[i-1][j]+f[i][j-1]-f[i-1][j-1]+g[i][j];
}
}
int sum=0;
while(q--){
int a,b,c,d;
cin>>a>>b>>c>>d;
sum=f[c][d]-f[a-1][d]-f[c][b-1]+f[a-1][b-1];
cout<<sum<<endl;
}
return 0;
}