二分模板

整数二分的模板有很多,但出错大多是因边界判断出现问题,出现死循环。所以记一个统一的模板很重要。
模板有以下两种:

1.mid在左半边

while(l<r)
{
  int mid=l+r>>1;
  if(check(mid))
    r=mid;
  else 
    l=mid+1;
}
return a[l];

2.mid在右半边

while(l<r)
{
  int mid=l+r+1>>1;//注意这里相比上面多加了1
  if(check(mid))
    l=mid;
  else 
    r=mid-1;
}
return a[l];

我们如果分析出我们的结果靠近左半边,就用第一个;反之,用第二个,加 1 主要是为了防止死循环。

posted @ 2020-04-05 15:20  Pecoz  阅读(156)  评论(0编辑  收藏  举报