水题,直接按照差分定义处理所有询问即可,最后跑二维前缀和,加到原数组上输出即可。
#include<bits/stdc++.h> using i64 = long long; int main() { std::cin.tie(nullptr)->sync_with_stdio(false); int n, m, q; std::cin >> n >> m >> q; std::vector a(n + 2, std::vector<i64>(m + 2)), diff = a; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { std::cin >> a[i][j]; } } while (q--) { int sx, sy, ex, ey, x; std::cin >> sx >> sy >> ex >> ey >> x; diff[sx][sy] += x; diff[sx][ey + 1] -= x; diff[ex + 1][sy] -= x; diff[ex + 1][ey + 1] += x; } for (auto &v : diff) { std::partial_sum(v.begin(), v.end(), v.begin()); } for (int j = 0; j <= m; j++) { for (int i = 1; i <= n; i++) { diff[i][j] += diff[i - 1][j]; } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { std::cout << diff[i][j] + a[i][j] << " "; } std::cout << "\n"; } return 0; }