二维前缀和

问题

给你一个H\times WH×W 的长方形.它共有H行W列,每一点上都有价值,X[i][j]代表第i行第j列的价值,总共有q次查询,每次查询输入起点(A,B)和终点(C,D)分别代表起点的行和列和终点的行和列,问你查询的起点和终点连成的矩形总价值是多少

数据范围

  • 1≤H,W≤1500
  • 1≤Q≤100000
  • 0≤Xi,j​≤9
  • 1≤Ai​≤Ci​≤H
  • 1≤Bi​≤Di​≤W
  • 所有数据都是整数

输入格式

H W
X1,1​ X1,2​ ⋯ X1,W​
:
:
XH,1​ XH,2​ ⋯ XH,W​
Q
A1​ B1​ C1​ D1​
:
:
AQ​ BQ​ CQ​ DQ

输出格式

输出Q 次查询的起点和终点连成的矩形的总价值

Sample 1

Inputcopy

Outputcopy

5 5
2 0 0 5 1
1 0 3 0 0
0 8 5 0 2
4 1 0 0 6
0 9 2 7 0
2
2 2 4 5
1 1 5 5

输出

25

56

#include
using namespace std;
const int N=1600;
int a[N][N],s[N][N];
int main(){
    int n,m,i,j;
    cin>>n>>m;//5 5
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            cin>>a[i][j];
            s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
        }
    }
    int q;
    cin>>q;
    while(q--){
        int x1,x2,y1,y2;
        cin>>x1>>y1>>x2>>y2;
        cout<     }
    return 0;
}

你可能感兴趣的:(算法,c++,c语言,开发语言)