返回题解分享
讨论 / 题解分享/ 帖子详情

子矩阵的和 - 题解

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n,m,q;
    cin >> n >> m >> q;
    //接收数组
    vector<vector<int>> arr(n+2 , vector<int> (m+2 , 0));
    for ( int i = 1; i < n+1; i++ ) {
        for ( int j = 1; j < m+1; j++ ) {
            cin >> arr[i][j];
        }
    }
    //前缀和数组
    vector<vector<int>> sums(n+2 , vector<int> (m+2 , 0));
    for ( int i = 1; i < n+1; i++ ) {
        for ( int j = 1; j < m+1; j++ ) {
            sums[i][j] = arr[i][j] + sums[i][j-1] + sums[i-1][j] - sums[i-1][j-1];
        }
    }
    //求范围和
    for ( int i = 1; i <= q; i++ ) {
        int x1,y1,x2,y2;
        cin >> x1 >> y1 >> x2 >> y2;
        int sum = 0;
        sum = sums[x2][y2] - sums[x2][y1-1] - sums[x1-1][y2] + sums[x1-1][y1-1];
        cout << sum << endl; 
    }

    return 0;
}
0 回复 0 转发 0 喜欢 6 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!