算法-二分
时间复杂度(logn)
当问题的答案具有单调性时,就可以通过二分把求解转换为判定。
1.整数二分
bool check(int x){...} //检查x是否满足某种性质int bsearch_1(int l,int r)
{int mid=(l+r)>>1;int ans=r;if(check(mid)) ans=mid,l=mid+1;else r=mid-1;return ans;
}int bsearch_2(int l,int r)
{int mid=(l+r)>>1;int ans=r;if(check(mid)) ans=mid,r=mid-1;else l=mid+1;return ans;
}
2.浮点数二分
bool check(double x) {...} // 检查x是否满足某种性质double bsearch_3(double l, double r)
{const double eps = 1e-6; // eps 表示精度,取决于题目对精度的要求while (r - l > eps){double mid = (l + r) / 2;if (check(mid)) r = mid;else l = mid;}return l;
}