用一维的想法来做,每行前缀求出来,最后循环求前缀和
#include <bits/stdc++.h>
using namespace std;
const int N=1001;
int a[N][N],sum[N][N]={0};
int main()
{
int n,m,k;
cin>>n>>m>>k;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%d",&a[i][j]);
sum[i][j]=sum[i][j-1]+a[i][j];
}
}
while(k--)
{
int x1,y1,x2,y2;
int ans=0;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
for(int i=x1;i<=x2;i++)
{
ans+=sum[i][y2]-sum[i][y1-1];
}
printf("%d\n",ans);
}
return 0;
}