$$\color{red}{算法}\color{blue}{基础课}\color{purple}{笔记and题解}\color{green}{汇总}$$
笔记:
既然上一篇题解,也就是一维差分说过差分是前缀和的逆运算,那么在二维差分上同样适用。
仍然是容斥原理。
参考一下二维前缀和的思想。
公式仍然在代码里。
代码:
#include <bits/stdc++.h>
using namespace std;
int a[1010][1010], b[1010][1010];
int main() {
int n, m, k;
cin>>n>>m>>k;
for (int i= 1; i <= n; i++)
for (int j = 1; j <= m; j++) cin>>a[i][j];
while (k--) {
int x1, x2, y1, y2, c;
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++, puts(""))
for (int j= 1; j <= m; j++) {
b[i][j] += b[i - 1][j] + b[i][j - 1] - b[i - 1][j - 1];
cout<<a[i][j]+b[i][j]<<' ';
}
}
函数p的参数x2和y1位置颠倒了
谢谢(这么明显我居然不知道
赞👍