4444: 【入门】子矩阵求和(2061)

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:53 解决:13

题目描述

小 lns="http://www.w3.org/1998/Math/MathML"> 同学有着很强的计算能力,张老师为了检验小 lns="http://www.w3.org/1998/Math/MathML"> 同学的计算能力,写了一个 lns="http://www.w3.org/1998/Math/MathML"> 行 lns="http://www.w3.org/1998/Math/MathML"> 列的矩阵数列。

张老师问了小 lns="http://www.w3.org/1998/Math/MathML"> 同学 lns="http://www.w3.org/1998/Math/MathML"> 个问题,每个问题会先告知小 lns="http://www.w3.org/1998/Math/MathML"> 同学 lns="http://www.w3.org/1998/Math/MathML">4 个数 lns="http://www.w3.org/1998/Math/MathML">1,1,2,2 表示这是矩阵中 lns="http://www.w3.org/1998/Math/MathML">2 个点的行列的值,以这两个点为一个矩形的左上角和右下角,可以从矩阵中画出一个子矩阵,张老师请小 lns="http://www.w3.org/1998/Math/MathML"> 同学计算出这个子矩阵中所有数的和。

请你编程帮助张老师计算出结果。

输入

第一行包含三个整数 lns="http://www.w3.org/1998/Math/MathML"> 。

接下来 lns="http://www.w3.org/1998/Math/MathML"> 行,每行包含 lns="http://www.w3.org/1998/Math/MathML"> 个整数。

接下来 lns="http://www.w3.org/1998/Math/MathML"> 行,每行包含四个整数 lns="http://www.w3.org/1998/Math/MathML">1,1,2,2,表示一组询问。

数据范围

lns="http://www.w3.org/1998/Math/MathML">1,1000

lns="http://www.w3.org/1998/Math/MathML">1200000

lns="http://www.w3.org/1998/Math/MathML">112,lns="http://www.w3.org/1998/Math/MathML">112

矩阵内元素的值均在 lns="http://www.w3.org/1998/Math/MathML">[1000,1000] 的范围内。

输出

共 lns="http://www.w3.org/1998/Math/MathML"> 行,每行输出一个询问的结果。

样例输入 复制

3 5 4
1 1 6 7 4
6 10 4 9 9
2 6 7 3 7
1 2 2 4
2 4 3 5
2 2 3 5
1 3 2 4

样例输出 复制

37
28
55
26

提示


#include<bits/stdc++.h>
using namespace std;
const int N=1010;
//a代表读入的数 
//b代表前缀和
int a[N][N],b[N][N];
int n,m,k;
int main(){
    scanf("%d%d%d",&n,&m,&k); //读入二维数组
    for(int i=1;i<= n;i++){
        for(int j=1;j<= m;j++){
            scanf("%d" ,&a[i][j]);
            //求前缀和
            b[i][j]=b[i-1][j]+ b[i][j-1]-b[i-1][j-1] + a[i][j];
        }
    }
    //读入k次询问
    int x1,y1,x2,y2;
    for(int i=1;i<= k;i++){
        scanf("%d%d%d%d",&x1,&y1,&x2,&y2); //输出区间和
        printf("%d\n",b[x2][y2]-b[x1-1][y2]-b[x2][y1-1]+b[x1-1][y1-1]);
    }
    return 0;
}