Cuboid Sum Query§
看时间限制发现用不上三维前缀和,就做个二维前缀和就行了,余下的一维暴力求和就行。
很典。
#include <bits/stdc++.h> using i64 = long long; int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int N; std::cin >> N; std::vector<std::vector<std::vector<i64>>> a( N + 1, std::vector<std::vector<i64>>(N + 1, std::vector<i64>(N + 1, 0))); for (int i = 1; i <= N; i++) { for (int j = 1; j <= N; j++) { for (int k = 1; k <= N; k++) { std::cin >> a[i][j][k]; } } } for (int i = 1; i <= N; i++) { for (int j = 1; j <= N; j++) { for (int k = 1; k <= N; k++) { a[i][j][k] = a[i][j - 1][k] + a[i][j][k - 1] - a[i][j - 1][k - 1] + a[i][j][k]; } } } int q; std::cin >> q; while (q--) { int l[4], r[4]; std::cin >> l[1] >> r[1] >> l[2] >> r[2] >> l[3] >> r[3]; i64 sum = 0; for (int i = l[1]; i <= r[1]; i++) { sum += a[i][r[2]][r[3]] + a[i][l[2] - 1][l[3] - 1] - a[i][l[2] - 1][r[3]] - a[i][r[2]][l[3] - 1]; } std::cout << sum << '\n'; } return 0; }