二分模版

二分模版

求下边界(第一个满足条件的)

int find_low(int x)
{
	int mid,l=1,r=n;
	while(l<=r)
	{
		mid=l+(r-l)/2;
		if(a[mid]<x) l=mid+1;
		else r=mid-1;
	}
	return l;
}

求上边界(最后一个满足条件的)

int find_up(int x)
{
	int mid,l=1,r=n;
	while(l<=r)
	{
		mid=l+(r-l)/2;
		if(a[mid]<=x) l=mid+1;
		else r=mid-1;
	}
	return l;
}

实数二分

bool check(double x)
{
	...//由题意判断
	return true;
}
double binary(double x)
{
	double mid,l=0,r=1e9;
	while(r-l>=eps)
	{
		mid=(l+r)>>1;
		if(check(mid)) l=mid; //这是单调递增时的二分边界修改
		else r=mid;
	}
	return l;
}

猜你喜欢

转载自blog.csdn.net/weixin_44235989/article/details/106686255
今日推荐