字首和矩陣求和
阿新 • • 發佈:2020-10-12
字首和
已知n*m矩陣,q次詢問,每次給出子矩陣左上角和右下角座標,求子矩陣的和。
1.暴力演算法 直接樸素的多重迴圈累加每一元素
2.優化演算法
用s(x,y)(x,y)表示面積
s(m,n)(p,q)=s(0,0)(p,q)-s(0,0)(m,q)-s(0,0)(p,n)+s(0,0)(m,n)
3.更優化演算法
include
include//可用<bits/stdc++.h>
using namespace std;//c++標準打法
long long N, M, e, query, x1, y1, x2, y2, ans, sum[2005][2005] = {0};//定義變數
int main() {
while (cin >> N >> M) { //cin和printf函式值固定為1 for (int i = 1; i <= N; ++i) { for (int j = 1; j <= M; ++j) { cin >> e; sum[i][j] = sum[i][j-1] + sum[i-1][j] - sum[i-1][j-1] + e; } } cin >> query; while (query--) { //query到零時停 cin >> x1 >> y1 >> x2 >> y2; ans = sum[x2][y2] - sum[x2][y1-1] - sum[x1-1][y2] + sum[x1-1][y1-1]; cout << ans << endl; } } return 0;
}