字首和與子矩陣的和

2021-10-04 13:09:01 字數 1579 閱讀 8097

一維字首和

s[i] = a[1] + a[2] + ... a[i]

a[l] + ... + a[r] = s[r] - s[l - 1]

二維字首和

s[i, j] = 第i行j列格仔左上部分所有元素的和

以(x1, y1)為左上角,(x2, y2)為右下角的子矩陣的和為:

s[x2, y2] - s[x1 - 1, y2] - s[x2, y1 - 1] + s[x1 - 1, y1

資料來自acwing

題目:字首和

輸入乙個長度為n的整數序列。

接下來再輸入m個詢問,每個詢問輸入一對l, r。

對於每個詢問,輸出原序列中從第l個數到第r個數的和。

輸入格式

第一行包含兩個整數n和m。

第二行包含n個整數,表示整數數列。

接下來m行,每行包含兩個整數l和r,表示乙個詢問的區間範圍。

輸出格式

共m行,每行輸出乙個詢問的結果。

資料範圍

1≤l≤r≤n,

1≤n,m≤100000,

−1000≤數列中元素的值≤1000

輸入樣例:

5 32 1 3 6 4

1 21 3

2 4輸出樣例:36

10

#include

using namespace std;

const

int n=

1e5+10;

int a[n]

;int ans[n]

;int

main()

while

(m--

)return0;

}

子矩陣的和

輸入乙個n行m列的整數矩陣,再輸入q個詢問,每個詢問包含四個整數x1, y1, x2, y2,表示乙個子矩陣的左上角座標和右下角座標。

對於每個詢問輸出子矩陣中所有數的和。

輸入格式

第一行包含三個整數n,m,q。

接下來n行,每行包含m個整數,表示整數矩陣。

接下來q行,每行包含四個整數x1, y1, x2, y2,表示一組詢問。

輸出格式

共q行,每行輸出乙個詢問的結果。

資料範圍

1≤n,m≤1000,

1≤q≤200000,

1≤x1≤x2≤n,

1≤y1≤y2≤m,

−1000≤矩陣內元素的值≤1000

輸入樣例:

3 4 3

1 7 2 4

3 6 2 8

2 1 2 3

1 1 2 2

2 1 3 4

1 3 3 4

輸出樣例:

1727

21

#include

using namespace std;

const

int n=

1005

;int a[n]

[n];

intmain()

return0;

}

一維陣列字首和 子矩陣和

字首和演算法解決靜態的陣列的字首和 樹狀陣列演算法可以解決動態陣列的字首和 字首和 題目連線 字首和暴力解法 tel include using namespace std const int n 100000 int a n 10 int s n 10 int main while m cout ...

海嘯 矩陣字首和

有乙個沿海地區,可以看作有n行m列的城市,第i行第j列的城市海拔為h i j 由於沿海,所以這個地區經常會發生海嘯。海嘯發生時,部分城市會被淹沒,具體來說,海水高度會達到d,因此海拔低於d的城市都會被淹沒。現在有q次詢問,每次問你乙個矩形區域中,有多少城市不會被淹沒。第一行三個整數n,m,d,具體含...

01矩陣字首和

題目描述 給定乙個 n m 的 01 矩陣,求包含 l,r 個 1的子矩形個數。第一行,兩個正整數 n,m。接下來 n行每乙個長度為 m的 01 串,表示給定的矩陣。接下來 一行,兩個自然數 l,r。首先暴力列舉顯然不可取 注意到,n非常小,可以考慮一種 o n 2m 的方法 很套路,要將詢問拆成 ...