1.查找下边界:
while(l<r)
{
int mid=(l+r)/2;
if(check(mid)) r=mid;
else l=mid+1;
}
###
注意我们查找的两个区域为[l,mid],[mid+1,r];
从第一个满足的条件不断向左压缩,所以此时check(mid)里成立的条件应该是mid>=key;
2.查找上边界
while(l<r)
{
int mid=(l+r+1)/2;
if(check(mid)) l=mid;
else r=mid-1;
}
###
注意我们查找的两个区域为[l,mid-1],[mid,r];
从第一个满足的条件不断向右压缩,所以check(mid)里成立的条件应该是mid<=key;