$$\color{red}{算法}\color{blue}{基础课}\color{purple}{笔记and题解}\color{green}{汇总}$$
笔记:
大体思路仍然和上一篇一维前缀和类似。
只是换了一下维度而已,换到二维了。
求二维前缀和需要用到容斥原理。
公式都在代码中体现了。
代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int n, m, q;
int a[N][N], s[N][N];
int main() {
cin >> n >> m >> q;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++) cin >> a[i][j];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
s[i][j] = s[i - 1][j] + s[i][j - 1] + a[i][j] - s[i - 1][j - 1];
while (q--) {
int a1, b1, a2, b2;
cin >>a1>>b1>>a2>>b2;
printf("%d\n", s[a2][b2] - s[a2][b1 - 1] - s[a1 - 1][b2]+ s[a1 - 1][b1 - 1]);
}
return 0;
}