二分與字首和 學習筆記

2021-10-18 02:31:04 字數 3150 閱讀 8527

整數二分要注意邊界,最好背過一套模板

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,

int r)

}

789. 數的範圍

給定乙個按照公升序排列的長度為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

輸入樣例:

631

2233

4345

輸出樣例:

345

5-1-

1

**:

#include

using

namespace std;

const

int n =

100001

;int a[n]

;int

main()

for(

int i =

0; i < k; i++)if

(a[r]

== x)

cout << l << endl;

}else

//找不到左端點直接輸出 -1 -1

cout <<

"-1 -1"

<< endl;

}return0;

}

相對整數二分來說簡單多了~ 沒有坑人的邊界問題

bool

check

(int x)

void

bserach

(double l,

double r)

}

790. 數的三次方根

給定乙個浮點數n,求它的三次方根。

輸入格式:

共一行,包含乙個浮點數n。

輸出格式

共一行,包含乙個浮點數,表示問題的解。

注意,結果保留6位小數。

資料範圍:

−10000 ≤ n ≤ 10000

輸入樣例:

1000.00
輸出樣例:

10.000000
**:

#include

#include

using

namespace std;

intmain()

double l =

0, r =

10001

;double mid;

while

(r - l >

1e-8)if

(fu)

mid *=(

-1);

printf

("%.6f"

, mid)

;return0;

}

1230. k倍區間

給定乙個長度為 n 的數列,a1,a2,…an,如果其中一段連續的子串行 ai,ai+1,…aj 之和是 k 的倍數,我們就稱這個區間 [ i , j ] 是 k 倍區間。

你能求出數列中總共有多少個 k 倍區間嗎?

輸入格式:

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

以下 n 行每行包含乙個整數 ai。

輸出格式

輸出乙個整數,代表 k 倍區間的數目。

資料範圍:

1 ≤ n , k ≤ 100000

1 ≤ ai ≤ 100000

輸入樣例:

521

2345

輸出樣例:

6
**:

#include

using

namespace std;

const

int n =

100010

;long

long

int n, k, x, ans =0;

long

long

int s[n]

;long

long

int res[n]

;int

main()

cout << ans << endl;

return0;

}

二分與字首和

時間複雜度o log n 資料區間 l mid r 實現 while l給定乙個按照公升序排列的長度為 n 的整數陣列,以及 q 個查詢。對於每個查詢,返回乙個元素 k 的起始位置和終止位置 位置從 0 開始計數 如果陣列中不存在該元素,則返回 1 1。輸入格式 第一行包含整數 n 和 q,表示陣列...

字首和 二分

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...

二分和字首和(藍橋)

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