二分查詢和二分答案

2021-10-17 09:09:17 字數 1817 閱讀 4234

1.解釋:

優點:查詢速度快。

缺點:待查表為有序表。

4.時間複雜度:

o(log n)

5.示例:

p2249查詢

#

include

#include

using

namespace std;

long

long n,m,a[

1000005

],b[

100005

],l,r,mid,cnt,x;

intmain()

for(

int i=

0;i)else}if

(a[l]

==x)

else

}for

(int i=

0;i)printf

("\n");

return0;

}

1.非正式的解釋:(後續會更新)

在題目的答案範圍內,利用二分假設答案,對每乙個假設的答案,用乙個自定義的check函式判斷該假設的答案是否為該題的答案,如果不是繼續二分下乙個。

2.適用:

1.求最大最小/最小的最大

2.求最靠近乙個值的值

3.示例:

p2678跳石頭

//l,n,m,分別表示起點到終點的距離,起點和終點之間的岩石數,以及組委會至多移走的岩石數。

#include

using

namespace std;

long

long l,m,n,a[

50005

],t;

bool

check

(long

long x)

//check函式:由題目要求自定義

if(cnt<=m)

return1;

else

return0;

}int

main()

long

long ans=

0,low=

0,high=l,mid;

//long long ans=0,low=1,high=t,mid;兩個都行

while

(low<=high)

else

}printf

("%lld\n"

,ans)

;return0;

}

4.推薦模板(來自y總)

整數二分演算法模板

//方法1:

// 區間[l, r]被劃分成[l, mid]和[mid + 1, r]時使用:

intbsearch_1

(int l,

int r)

return l;

}//方法2;

// 區間[l, r]被劃分成[l, mid - 1]和[mid, r]時使用:

intbsearch_2

(int l,

int r)

return l;

}

浮點數二分演算法模板

double

bsearch_3

(double

l,double

r)return l;

}

如有錯誤,歡迎指出。

二分查詢與二分答案

主要用於在乙個單調的函式中查詢某值 連續函式的情況 若當前查詢的區間是 l,r 查詢的值是 y 函式單增 設 mid l r 2 若 f mid y 則 l mid,否則 r mid 直至 r l eps 當前查詢的區間是 l,r 查詢的值是 y 函式單增 設 mid l r 2 若 f mid y...

二分查詢與二分答案(1)

我們在寫程式的時候,經常會遇到這樣一類問題 在乙個陣列中查詢乙個數是不是存在。比如在下圖的陣列中,查詢8是不是存在 如果不要求效率,我們最一般的查詢方法就是順序查詢,依次檢視a 0 a 1 a n 1 檢查是不是等於8。這樣對於長度為n的陣列,平均查詢長度是n 2 如果陣列是有序的,比如是遞增的,就...

二分與二分答案學習

判斷left,mid,right的符號進行區間的精確。如下為遞迴二分求零點的操作 double find zero point double left,double right,double precesion double mid right left 2 if f mid 0 if f mid ...