整數二分:
bool
check
(int x)
//檢查x是否滿足某種性質
//區間[l,r]被劃分為[l,mid]和[mid+1,r]時使用
intbsearch_1
(int l,
int r)
return l;
}//區間[l,r]被劃分為[,mid-1]和[mid,r]時使用
intbsearch_2
(int l,
int r)
return l;
}
浮點數二分
bool
check
(double x)
double
bsearch_3
(double l,
double r)
return l;
}
整數二分例題
/*給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。
對於每個查詢,返回乙個元素k的起始位置和終止位置(位置從0開始計數)。
如果陣列中不存在該元素,則返回「-1 -1」。*/
#include
#include
using
namespace std;
int a[
100005];
intmain()
while
(q--)if
(a[l]
!=k)
printf
("-1 -1\n");
else
printf
("%d\n"
,r);}}
return0;
}
浮點數二分例題
/*
給定乙個浮點數n,求它的三次方根。
輸入格式
共一行,包含乙個浮點數n。
輸出格式
共一行,包含乙個浮點數,表示問題的解。
注意,結果保留6位小數。
資料範圍
−10000≤n≤10000
*/#include
using
namespace std;
intmain()
printf
("%.6f"
,l);
return0;
}
對於每組輸入資料:
第一排 分別是 河的寬度、石頭的個數n、最多的跳躍次數.
以下n排是n個石頭的座標,
然後要求在最多跳躍次數以內,每次落地只能在石頭上,跳到河的對岸.輸出青蛙至少有每次跳多遠的能力?
#include
#include
using
namespace std;
const
int n=
5e5+10;
int a[n]
;int l,n,m;
bool
check
(int x)
//檢查x是否滿足某種性質 ,x為跳遠能力,要檢查當前的能力是否能夠過河
//次數用完了,可以走到頭,也就是到了最後重點的那個認為的石頭,就是答案
if(now==l)
//走到頭
return
true
;else
return
false;}
//區間[l,r]被劃分為[l,mid]和[mid+1,r]時使用
intbsearch_1
(int l,
int r)
return l;
}int
main()
sort
(a,a+n)
; a[n]
=l;int max=a[0]
;for
(int i=
0;i) cout<<
bsearch_1
(max,l)
<}return0;
}
二分查詢與二分答案
主要用於在乙個單調的函式中查詢某值 連續函式的情況 若當前查詢的區間是 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.解釋 優點 查詢速度快。缺點 待查表為有序表。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 i...
二分與二分答案學習
判斷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 ...