// #牛客春招刷题训练营# + 链接
红色圈圈的前缀和 = 红色区域的总和 = 两个蓝色区域的前缀和之和 - 绿色区域的前缀和(重复部分)
a[i][j] = a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1] + x;
计算区域和红色 = 蓝色的和 - 绿色的和
a[xx][yy] - a[x - 1][yy] - a[xx][y - 1] + a[x - 1][y - 1]
#include <array> #include <iostream> using namespace std; array<array<long long, 1010>, 1010> a{0}; int main() { int n, m, p, x; cin >> n >> m >> p; for (int i = 1; i < n + 1; i++) for (int j = 1; j < m + 1; j++){ cin >> x; a[i][j] = a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1] + x; } int y, xx, yy; while(p--){ cin >> x >> y >> xx >> yy; cout << a[xx][yy] - a[x - 1][yy] - a[xx][y - 1] + a[x - 1][y - 1] << endl; } } // 64 位输出请用 printf("%lld")