2.二分
2.1整数二分
2.1.1模板一
int l = 0, r = 1e9;
while(l < r)
{
int mid = l + r + 1 >> 1;
if(check(mid)) l = mid;
else r = mid - 1;
}
2.1.2模板二
int l = 0, r = 1e9;
while(l < r)
{
int mid = l + r >> 1;
if(check()) r = mid;
else l = mid + 1;
}
2.2浮点数二分
double l = 0, r = 1e18;
while(r - l >= 1e-8)
{
double mid = (l + r) / 2;
if(chcek()) l = mid;
else r = mid;
}
ps
1.浮点数二分,最后要输出下取整的话,最好后面使用r,而非l,因为虽然l和r很接近,但是可能会出现r = 10, l = 9.999999的情况,取完整后直接就寄了