二分
有单调性一定可以二分,没有单调性也有可能可以二分
整数二分
bool check(int x) {}
int bsearch1(int l, int r)
{
while(l < r)
{
int mid = (l + r) / 2;
if(check(mid)) r = mid;
else l = mid + 1;
}
return r;
}
int bsearch2(int l, int r)
{
while(l < r)
{
int mid = (l + r + 1) / 2;
if(check(mid)) l = mid;
else r = mid - 1;
}
return r;
}
浮点数二分
浮点数二分比整数二分要简单不少,因为不用考虑两种情况
int bsearch(double l, double r)
{
while(r - l > 1e-6)
{
double mid = (l + r) / 2;
if(check(mid)) r = mid;
else l = mid;
}
return r;
}
例题

示例代码如下:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double n;
cin>>n;
double l = -10000, r = 10000;
while(r - l > 1e-8)
{
double mid = (r + l) / 2;
if (mid * mid * mid >= n)
{
r = mid;
}
else
{
l = mid;
}
}
cout<<fixed<<setprecision(6)<<l;
}
关键点:此题的关键于在于l和r的初始值的设定,记住设为l = -10000, r = 10000