lower_bound(大于等于x的第一个数),upper_bound(大于等于x的最后一个数字)

//core code 
int a[10] = { 1,3,5,9,13,16,22,45,48,49 };
//寻找>=x的第一个位置 Find the first position >= x ,from left to right;
int pos(int x,int l,int r)
{
	int mid;
	while (l < r)
	{
		int mid = (r + l) >> 1;
		//为了避免死循环,也可以加1以后在除以2  
		//In order to avoid an infinite loop, 
		//you can also add 1 and then divide by 2
		if (a[mid] >= x) r = mid - 1; 
		//死循环:就是r依然等于r l依然等于l	
		else l = mid + 1;
	}
	//循环结束-  l r停在了结果的前一个位置。
	//End of loop - l r stopped at the previous position of the result.
	cout << r + 1;
	return 1;
}

//从左到右,寻找<=x的第一个位置  
//From left to right, find the first position where <= x
int pos1(int x, int l, int r)
{
	int mid;
	while (l < r)
	{
		int mid = (l + r) >> 1;
		if (a[mid] <= x) l = mid + 1;
		else r = mid - 1;
	}
	cout << l - 1;
	return 1;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务