二分算法的模板及分析
一、整数二分
代码模板
第一类
int l = 0, r = n - 1;
while (l < r)
{
int mid = l + r >> 1;
if (x <= a[mid]) r = mid;
else l = mid + 1;
}
第二类
int l = 0, r = n - 1;
while (l < r)
{
int mid = l + r + 1 >> 1;
if (a[mid] <= x) l = mid;
else r = mid - 1;
}
二、浮点数开方
代码模板
double l = 0, r = 10000;
while (r - l > 1e-8)
{
double mid = (l + r) / 2;
if (mid * mid < n) l = mid;
else r = mid;
}