#include <bits/stdc++.h> using namespace std; #define IOS ios::sync_with_stdio(false), cin.tie(0); #define rep(i, n) for (int i = 0; i < (n); i++) typedef long long LL; typedef pair<int, int> PII; typedef vector<int> vi; const int N=1010; int n, m, q; LL b[N][N]; void work(int x1, int y1, int x2, int y2, int c) { b[x1][y1]+=c, b[x1][y2+1]-=c, b[x2+1][y1]-=c, b[x2+1][y2+1]+=c; } int main() { IOS cin>>n>>m>>q; for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) { int x; cin>>x; work(i, j, i, j, x); } while(q--){ int x1, y1, x2, y2, k; cin>>x1>>y1>>x2>>y2>>k; work(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]; for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) cout<<b[i][j]<<" \n"[j==m]; return 0; }
二维差分模板题,b[x1][y1]+=c, b[x1][y2+1]-=c, b[x2+1][y1]-=c, b[x2+1][y2+1]+=c
差分就是前缀和的逆运算,注意输入时也要按差分插入数据,输出时可以用[]这种控制