水题,直接按二维前缀和定义写就行。
#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;
}

京公网安备 11010502036488号