要求
- 性质具有二段性。
- 答案是二段的分界点。
答案($ans$)是左边区间的右端点
- 将$[L, R]$分成$[L, M-1]$, $[M, R]$
- 若$M$落在左边区间,则$ans$必然在$[M, R]$.否则$ans$必然在$[L, M-1]$
while(L < R){
M = (L + R + 1) >> 1;
if(M 在左边区间)L = M;
else R = M - 1;
}
答案($ans$)在右边区间的左端点
- 将$[L, R]$分成$[L, M]$, $[M + 1, R]$
- 若$M$落在左边区间,则$ans$必然在$[M + 1, R]$.否则$ans$必然在$[L, M]$
while(L < R){
M = (L + R) >> 1;
if(M在左边区间)L = M + 1;
else R = M;
}
实数二分(求三次方根为例)
将$[L, R]$分成$[L, M]$, $[M, R]$
while(r - l > 1e-8){ //题目要求n(6)位精度,这里就取1e-(n+2)
double mid = (l + r) / 2;
if(pow(mid,3) < n)l = mid;
else r = mid;
}