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;
}
}