题目
796. 子矩阵的和
思路
和一维前缀和类似,只不过在算s[i][j]时先减去两部分再加上减的重复的一部分再加上a[i][j]。最后输出时就用s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1]<<endl。
代码
#include<iostream>
using namespace std;
const int N=1010;
int main()
{int n,m,q;cin>>n>>m>>q;int a[N][N],s[N][N];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;cout<<s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1]<<endl;}return 0;}