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