二分
1. 整數二分
1.1 找大於某個數的最小值
int bsearch_1(int l, int r)
{
while (l < r)
{
int mid = (l + r) >> 1; // 區別:有無加1
if (check(mid)) r = mid; //區別
else l = mid + 1; //區別
}
return l;
}
1.2 找小於某個數的最大值
int bsearch_2(int l, int r)
{
while (l < r)
{
int mid = (l + r + 1) >> 1; // 區別:有無加1
if (check(mid)) l = mid; //區別
else r = mid - 1; //區別
}
return l;
}
2. 浮點數二分
double bin_search(double l, double r)
{
while (r - l > 1e-8) // r與l的間隔小於1e-8
{
double mid = (l + r) / 2; // 不須要考慮加一的事情
if (mid * mid * mid >= n) r = mid;
else l = mid; // r和l都是mid
}
return l;
}