查找左边界
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)
标签:二分,mid,else,while,查找,中点,模板 From: https://www.cnblogs.com/qlc23333/p/17290730.html