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;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 12:02
ssob上原来真有BOSS啊
硫蛋蛋:这种也是打工的,只不是是给写字楼房东打工
点赞 评论 收藏
分享
小叮当411:应该是1-3个月吧
点赞 评论 收藏
分享
05-20 13:59
门头沟学院 Java
米黑子米黑子:你这个成绩不争取下保研?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务