二分

  • 整数二分

理解:

模板1:求最大值(右边的箭头)

while(l<r){
      int mid=(l+r+1)/2;
      if(check(mid)){
            l=mid;
      }
      else{
            r=mid-1;
      }
}

模板2:求最小值(左边的箭头)

while(l<r){
      int mid=(l+r)/2;
      if(check(mid)){
            r=mid;
      }
      else{
            l=mid+1;
      }
}
  • 浮点数二分

与整数二分的区别:不需要处理边界问题
模板:

while(r-l<1e-4){
      double mid=(l+r)/2;
      if(check(mid))
            l=mid;
      else
            r=mid;
}
posted @ 2021-01-27 17:51  z_thorn  阅读(53)  评论(0编辑  收藏  举报