一维
#include<bits/stdc++.h> using namespace std; const int N=100010; int n,m; int a[N],s[N]; int main(){ ios::sync_with_stdio(false); //提高cin的读取速度,但不能是用scanf md,还是没有scanf快的 cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i]; while(m--){ int l,r; cin>>l>>r; cout<<s[r]-s[l-1]<<endl; //区间和的计算 } return 0; }
二维
#include<bits/stdc++.h> using namespace std; const int N=1010; int n,m,q; int a[N][N],s[N][N]; int main() { cin>>n>>m>>q; for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) cin>>a[i][j]; for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j]; //求前缀和 while(q--) { int x1,y1,x2,y2; cin>>x1>>y1>>x2>>y2; printf("%d\n",s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1]);//算子矩阵的和 } return 0; }