二分與字首和

2021-10-25 20:15:29 字數 2725 閱讀 6513

時間複雜度o(log n).

資料區間:

l----------------mid-----------------r

**實現:

while

(l

給定乙個按照公升序排列的長度為 n 的整數陣列,以及 q 個查詢。

對於每個查詢,返回乙個元素 k 的起始位置和終止位置(位置從 0 開始計數)。

如果陣列中不存在該元素,則返回 -1 -1。

輸入格式

第一行包含整數 n 和 q,表示陣列長度和詢問個數。

第二行包含 n 個整數(均在 1∼10000 範圍內),表示完整陣列。

接下來 q 行,每行包含乙個整數 k,表示乙個詢問元素。

輸出格式

共 q 行,每行包含兩個整數,表示所求元素的起始位置和終止位置。

如果陣列中不存在該元素,則返回 -1 -1。

資料範圍

1≤n≤100000

1≤q≤10000

1≤k≤10000

輸入樣例:

6 3

1 2 2 3 3 434

5

輸出樣例:
3 4

5 5-1 -1

#include

using

namespace std;

const

int n=

100010

;int n,m;

int q[n]

;int

main()

if(q[r]

==x)

cout<

}else

cout<<

"-1 -1"

<

}return0;

}

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

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

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

輸入格式

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

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

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

輸出格式

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

資料範圍

1≤l≤r≤n,

1≤n,m≤100000,

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

輸入樣例:

5 3

2 1 3 6 4

1 21 3

2 4

輸出樣例:

綠色的子矩陣的和=(紫色+黑色)-(紅色+黑色)

子矩陣求和:

輸入乙個 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

輸出樣例:

17

2721

#include

using

namespace std;

const

int n=

1e5;

int n,m,q;

int temp[n]

[n];

int sum[n]

[n];

intmain()

for(

int i=

1;i<=n;i++

)for

(int j=

1;j<=m;j++

)for

(int i=

1;i<=q;i++

)return0;

}

字首和 二分

powered by ab in 局外人 拿洛谷的乙個例子記一下字首和。資料超過了1e5,故o n 2 的演算法又行不通,所以換二分 include typedef long long ll using namespace std ll n,m,l,r ll a 1000001 sum 100000...

二分與字首和 學習筆記

整數二分要注意邊界,最好背過一套模板 bool check int x 區間 l,r 被劃分成 l,mid 1 和 mid,r 時使用 void bsearch 1 int l,int r 區間 l,r 被劃分成 mid 1,r 和 l,mid 時使用 void bsearch 1 int l,in...

二分和字首和(藍橋)

二分 1.數的範圍 題意 給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。1 n 100010,q 10000.對於每個查詢,返回乙個元素k的起始位置和終止位置 位置從0開始計數 如果陣列中不存在該元素,則返回 1 1 思路 對於已經排好序的,且要求查詢陣列中某乙個數的位置,屬於搜尋類...