二维前缀和
原数组a[i][j]
前缀和数组s[i][j]表示i,j这个点左上角所有数的和
所以以x1,y1为左上角,x2,y2为右下角的矩阵的和等于:上式。
这是计算子矩阵的和。
然后是如何初始化前缀和数组。
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 1010; 4 int a[N][N], s[N][N]; 5 int main() { 6 int n, m, q; 7 cin >> n >> m >> q; 8 for (int i = 1; i <= n; i++) { 9 for (int j = 1; j <= m; j++) { 10 cin >> a[i][j]; 11 s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j]; 12 //求前缀和 13 } 14 } 15 while (q--) { 16 int x1, y1, x2, y2; 17 cin >> x1 >> y1 >> x2 >> y2; 18 cout << s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1 - 1][y1 - 1] << endl; 19 //求子矩阵的和 20 } 21 return 0; 22 }