**
二分答案的基本思路,對所求數值的所在範圍進行二分查詢,對特定數值進行判斷是否符合要求。
但是難點在於f(x)函式,要根據題目來寫。
a - 二分(經典題)(*)(最大化最小值)
fun函式內貪心判斷,設兩個指標,找到最近的前面的不小於後面的位置座標,,m-1頭牛全部找到即可。
#include
#include
using
namespace std;
int n,c;
int a[
100005];
bool
fun(
int x)
if(t2==n)
t1=t2//找到的話進行位置的更新
return
true;}
intmain()
sort
(a,a+n)
;int minn=
0,maxx=a[n-1]
,mid;
while
(maxx-minn>1)
cout
}
b - 二分(*)
#include
#include
using
namespace std;
char a[
200005
],b[
200005];
int del[
200005
],vis[
200005];
int la,lb;
intfun
(int mid)
int now=0;
for(
int i=
0;i}if
(now==lb)
return1;
else
return0;
}int
main()
int ans=-1
,l=0
,r=la-1;
while
(r-l>=0)
else
} cout<1
}
d - snowball
直接模擬一遍
#include
using
namespace std;
intmain()
cout
}
e - squares and segments
長與寬越接近,可以使得面積最大,長與寬的和最小。
所以比較長寬的大小,小的那個進行加一處理。
#include
using
namespace std;
int n,w=
1,h=1;
intmain()
cout
}
二分查詢與二分答案
主要用於在乙個單調的函式中查詢某值 連續函式的情況 若當前查詢的區間是 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 ...