
首先我们的目标是让 sij表示为其左方和上方形成的矩阵所有元素的和

加上si-1j和sij-1后 si-1j-1部分重复了所以减去
最后加上aij即可完成目标
sij=si-1j+sij-1-si-1j-1+aij;
然后看题目要求
要求x1,y1,x2,y2围成的小正方形内的元素和
我们利用刚刚处理好的sij来操作

将是sx2y2圈成的大正方形里面扣掉这两块
即sx2y1-1和sx1-1y2
最后加回去重复减去的sx1-1y1-1即可
所以式子为 sx2y2-sx2y1-1-sx1-1y2+sx1-1y1-1;
代码
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1010;
int aNN,sNN;
int n,m,q;
int main(){
cin>>n>>m>>q;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>aij;
sij=si-1j+sij-1-si-1j-1+aij;
}
}
while(q--){
int x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
cout<<sx2y2-sx2y1-1-sx1-1y2+sx1-1y1-1;
}
return 0;
}