题解 | #【模板】二维差分#
【模板】二维差分
https://www.nowcoder.com/practice/50e1a93989df42efb0b1dec386fb4ccc
#include <iostream> using namespace std; const int N = 1010; long long a[N][N], b[N][N]; void insert(int x1, int y1, int x2, int y2, int k) { b[x1][y1] += k; b[x1][y2 + 1] -= k; b[x2 + 1][y1] -= k; b[x2 + 1][y2 + 1] += k; } int main() { int n, m, q; cin >> n >> m >> q; for (int i = 1; i <= n; i ++) { for (int j = 1; j <= m; j ++) { cin >> a[i][j]; insert(i, j, i, j, a[i][j]); } } while (q --) { int x1, y1, x2, y2, k; cin >> x1 >> y1 >> x2 >> y2 >> k; insert(x1, y1, x2, y2, k); } for (int i = 1; i <= n; i ++) { for (int j = 1; j <= m; j ++) { b[i][j] += b[i - 1][j] + b[i][j - 1] - b[i - 1][j - 1]; cout << b[i][j] << " "; } cout << endl; } }