> 文章列表 > 二分查找三种模板

二分查找三种模板

二分查找三种模板

两种输出l或r都可以

边界合法

int l = 0, r = n - 1;
while (l < r) {int mid = l + r >> 1;if (a[mid] < x)  l = mid + 1;else    r = mid;
}

左边界合法

int l = 0, r = n - 1;
while (l < r){int mid = l + r + 1 >> 1;//注意加1防止死循环if (a[mid] <= x) l = mid;else r = mid - 1;}

double类型
例题:充电宝

while(r-l>1e-5) {double mid=(l+r)/2;if(check(mid))l=mid;else r=mid;}cout<<r; //结果输出r