水题,直接按照差分定义处理所有询问即可,最后跑二维前缀和,加到原数组上输出即可。

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

https://www.nowcoder.com/discuss/727521113110073344