107006 - 子矩阵求和

题解byliguanghan1

//子矩阵求和 
#include <bits/stdc++.h>
using namespace std;
int A[1002][1002];//定义全局数组,初始化为0 
int main()
{
  int n,m,q;
  scanf("%d%d%d",&n,&m,&q);//数据多,用scanf或内联函数 
  for(int i=1; i<=n; i++) 
    for(int j=1; j<=m; j++)//双重循环 
    {
      scanf("%d",&A[i][j]);
      A[i][j]+=A[i-1][j]+A[i][j-1]-A[i-1][j-1];//二维的//子矩阵求和 
#include <bits/stdc++.h>
using namespace std;
int A[1002][1002];//定义全局数组,初始化为0 
int main()
{
  int n,m,q;
  scanf("%d%d%d",&n,&m,&q);//数据多,用scanf或内联函数 
  for(int i=1; i<=n; i++) 
    for(int j=1; j<=m; j++)//双重循环 
    {
      scanf("%d",&A[i][j]);
      A[i][j]+=A[i-1][j]+A[i][j-1]-A[i-1][j-1];//前序和思想,书上181、182页 
    }
  for(int i=1; i<=q; i++)//开始询问 
  {
    int a,b,c,d;
    scanf("%d%d%d%d",&a,&b,&c,&d);
    int X1=min(a,c),X=max(a,c);//不一定是小的数在前,进行调整
    int Y1=min(b,d),Y=max(b,d);//用if和swap也可以 
    int x=X1-1,y=Y1-1;//方便统计 
    cout<<A[X][Y]-A[x][Y]-A[X][y]+A[x][y]<<'\n';//前序和,记得换行 
  return 0;
}