整数二分
#include <iostream>
using namespace std;
// 代码不完善,还要考虑只有一个元素的情况
// 还要考虑全符合和全不符合时的边界问题
// 在取 mid 时,常用 mid = l + (r - l)/2 和 mid = l + (r - l + 1)/2 来避免整数溢出
bool check(int x)
{
// 判断 x 是否满足某性质
}
// 右边区间符合条件,返回第一个符合条件的数
int binary_search(int l, int r)
{
while (l < r)
{
int mid = (l + r) / 2; //向下取整
if (check(mid))
{
r = mid;
}
else
{
l = mid + 1;
}
}
return l;
}
// 左边区间符合条件,返回最后一个符合要求的数
int binary_search_2(int l, int r)
{
while (l < r)
{
int mid = (l + r + 1) / 2; //向上取整
if (check(mid))
{
l = mid;
}
else
{
r = mid - 1;
}
}
return l;
}
int main()
{
return 0;
}
浮点数二分
#include <iostream>
using namespace std;
bool check(double x)
{
//判断 x 是否符合性质
}
double binary_search_1(double l, double r)
{
const double eps = 1e-6; // eps 表示精度,取决于题目对精度的要求
while (r - l > eps)
{
double mid = (l + r) / 2;
if (check(mid))
{
r = mid;
}
else
{
l = mid;
}
}
return l;
}
int main()
{
return 0;
}