二分模板

查找左边界

while(l < r)
{
     int mid = l + r >> 1;
     if(中点在右边)r = mid;
else l = mid + 1; }

查找右边界

while(l < r)
{
     int mid = (l + r >> 1) + 1;
     if(中点在左边边)l = mid;
     else r = mid - 1;
}

查找找某个数 :上边两个都行

查找实数

while(r - l >= eps)
{
     double mid = (l + r) / 2;
     if(中点在右边) r = mid;
     else l= mid;  
}

时间复杂度 : O(logn)

常见用法:

1,二分查找

 

2,二分答案(优化枚举答案:O(n)- O(logn)),此时难点是写check函数,总复杂度一般为O(nlogn)

posted @ 2023-04-05 19:56  qlc23333  阅读(18)  评论(0)    收藏  举报