牢记二分姿势
左闭右开:
代码
//最小化最大值
l=-1,r=n+1;
while(l+1<r)
{
int mid=(l+r)>>1;
if(check(mid))//如果满足条件,尝试缩小答案
r=mid;
else l=mid;
}
printf("%d",r);
//最大化最小值
l=0,r=n+1;
while(l+1<r)
{
int mid=(l+r)>>1;
if(check(mid))//如果满足条件,尝试扩大答案
l=mid;
else r=mid;
}
printf("%d",l);
左闭右闭:
代码
l=-1,r=n+1;
while(l<=r)
{
int mid=(l+r)>>1;
if(check(mid))
{
ans=mid;
l=mid-1;
}
else r=mid+1;
}
printf("%d",ans);