798 差分

由于定义 b[i][j] = a[i][j] + a[i - 1][j - 1] - a[i - 1][j] - a[i][j - 1], b数组的值这样求,
那么 a[i][j] = a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1] + b[i][j];
每次改变一个矩形的形状的里面的值,假设 (x1,y1)(x2,y2)确定一个矩形, 那么b数组被改变的是
b[x1][y1] b[x2 + 1][y1] b[x1][y2 + 1] b[x2 + 1][y2 + 1] 这四个点,只需要修改这四个就好了,

    #include<iostream>
    using namespace std;
    const int N = 2000;
    int a[N][N], b[N][N];
    int main() {
        int n, m, q;
        cin >> n >> m >> q;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                int temp;
                cin >> temp;
                a[i][j] = temp;
                b[i][j] = a[i][j] + a[i - 1][j - 1] - a[i - 1][j] - a[i][j - 1];
            }
        }
        int x1, x2, y1, y2, c;
        while (q--) {
            cin >> x1 >> y1 >> x2 >> y2 >> c;
            b[x1][y1] += c, b[x2 + 1][y1] -= c, b[x1][y2 + 1] -= c, b[x2 + 1][y2 + 1] += c;
        }
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                a[i][j] = a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1] + b[i][j];
                cout << a[i][j] << " ";
            }
            cout << endl;
        }
    }
posted @ 2022-08-24 23:45  天然气之子  阅读(16)  评论(0编辑  收藏  举报