定义 :
二分答案与二分查找类似,即对有着单调性的答案进行二分,
大多数情况下用于求解满足某种条件下的最大(小)值。
代码:
为了保证解在二分搜索的区间里,
故不同的问题有着不同(但相似)的写法
template <typename T>
int binary(T n) {
int l = 1;
int r = maxn;
int ans = 0;
while(l <= r) {
int mid = (l + r) >> 1;
if(c[mid] > a[n]) {
ans = mid, l = mid + 1; //判断条件与ans记录位置因题而异
}
else r = mid - 1;
}
return ans;
}
拓展:
求最小值
int binary() {
int l = 0, r = ll, mid;
while(l < r) {
mid = (l + r) >> 1;
if(check(mid)) {
r = mid; //大多数题只要改改check()即可
}
else l = mid + 1;
}
return l;
}
求最大值
int binary() {
int l = 0;
int r = ll;
int mid;
while(l < r) {
mid = (l + r + 1) >> 1;
if(check(mid)) {
r = mid - 1;
}
else l = mid;
}
return l;
}