演算法學習 整數二分

2022-07-01 08:06:08 字數 877 閱讀 7856

目前尚沒有很徹底的理解,所以先將大佬的模板和思路拷貝下來,待理解透徹後再上自己的理解。

二分模板一共有兩個,分別適用於不同情況。

演算法思路:假設目標值在閉區間[l, r]中, 每次將區間長度縮小一半,當l = r時,我們就找到了目標值。

版本1當我們將區間[l, r]劃分成[l, mid]和[mid + 1, r]時,其更新操作是r = mid或者l = mid + 1;,計算mid時不需要加1。

c++ **模板:

int bsearch_1(int l, int

r)

return

l;}

版本2當我們將區間[l, r]劃分成[l, mid - 1]和[mid, r]時,其更新操作是r = mid - 1或者l = mid;,此時為了防止死迴圈,計算mid時需要加1。

c++ **模板:

int bsearch_2(int l, int

r)

return

l;}

例題:

題解**:

#includeusing

namespace

std;

const

int n = 1e6+10

;int

a[n];

intn,m;

intmain()

if(a[l] != x) printf("

-1 -1\n");

else

printf(

"%d\n

",l);}}

return0;

}

演算法學習 整體二分

我們開門見山,講講一道sb題 給你乙個陣列,查這個陣列的第x大元素。排序?可以 二分?怎麼做啊?二分出乙個mid,判斷這個陣列中有多少個數小於等於mid,如果個數大於等於x,就遞迴到 l,mid 區間,否則是 mid 1,r 區間,這樣遞迴下去就能得到結果。怎麼計算小於等於mid的個數?for一遍原...

演算法學習 二分搜尋二分答案2

顧名思義,二分答案就是用二分查詢的思路去找答案,下面通過舉例來說明。題目 p1873 砍樹 砍下樹木的高度 h 從 0 一直到所有樹木中最高的高度 hmax 依次遞增,我們可以此為依據進行二分搜尋得出答案。includeusing namespace std long long n,m,arr 10...

演算法學習之路 二分查詢

描述 給定乙個單調遞增的整數序列,問某個整數是否在序列中。輸入 第一行為乙個整數n,表示序列中整數的個數 第二行為n n不超過10000 個整數 第三行為乙個整數m m不超過50000 表示查詢的個數 接下來m行每行乙個整數k。輸出 每個查詢的輸出佔一行,如果k在序列中,輸出yes,否則輸出no。輸...