水题,直接按二维前缀和定义写就行。
#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 pre(n + 1, std::vector<i64>(m + 1)); for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { std::cin >> pre[i][j]; } } for (auto &v : pre) { std::partial_sum(v.begin(), v.end(), v.begin()); } for (int i = 0; i <= m; i++) { for (int j = 1; j <= n; j++) { pre[j][i] += pre[j - 1][i]; } } while (q--) { int sx, sy, ex, ey; std::cin >> sx >> sy >> ex >> ey; std::cout << pre[ex][ey] - pre[ex][sy - 1] - pre[sx - 1][ey] + pre[sx - 1][sy - 1] << "\n"; } return 0; }