二维前缀和核心操作:
代码如下:
#include <iostream>
using namespace std;
const int N = 2000;
int mp[N][N];
int dp[N][N];int main() {int n, m, k;cin >> n >> m >> k;//矩阵为n*m,k次查询for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)cin >> mp[i][j];for (int i = 1; i <= n; i++)//预处理for (int j = 1; j <= m; j++)dp[i][j] = dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1] + mp[i][j];for (int i = 0; i < k; i++) {//接受查询int x1, y1, x2, y2;cin >> x1 >> y1 >> x2 >> y2;cout << dp[x2][y2] - dp[x1 - 1][y2 - 1] - dp[x1 - 1][y2] - dp[x2][y1 - 1] << endl;}return 0;
}