查找函数 lower_bound()及其应用 uva10474

查找函数 lower_bound()及其应用 uva10474

#include<algorithm>
lower_bound(int* first,int* last,val);

函数lower_bound()在first和last中的前闭后开区间,进行二分查找。返回从first开始的第一个大于或等于val的元素的地址。如果所有元素都小于val,则返回last的地址。注意:数组必须是排好序的数组。

所以通常用法是:

  int a[8]={4,10,11,30,69,70,96,100};
    int pos;
    pos=lower_bound(a,a+8,11)-a;

这样pos就是第一个大于或等于11的元素的下标。运算结果为pos=2;

如果不存在这样的元素:

pos = lower_bound( a, a + 8, 111) - number, pos = 8;

number数组的下标为8的位置(但下标上限为7,所以返回最后一个元素的下一个元素)

大理石在哪儿(Where is the Marble?,Uva 10474)
现有N个大理石,每个大理石上写了一个非负整数。首先把各数从小到大排序,然后回 答Q个问题。每个问题问是否有一个大理石写着某个整数x,如果是,还要回答哪个大理石上 写着x。排序后的大理石从左到右编号为1~N。(在样例中,为了节约篇幅,所有大理石上 的数合并到一行,所有问题也合并到一行。)

样例输入:

4 1

2 3 5 1

5

5 2

1 3 3 3 1

2 3

样例输出:

CASE #1:

5 found at 4

CASE #2:

2 not found

3 found at 3

【分析】

题目意思已经很清楚了:先排序,再查找。使用algorithm头文件中的sort和lower_bound 很容易完成这两项操作,代码如下:

#include<iostream>
#include<algorithm>
#include<cstdio> 
using namespace std;
const int maxn = 10000;
int main()
{
	int n, m, x,ase = 0;
	int a[maxn];
	while(scanf("%d%d",&n,&m)==2&&n)
	{
		for(int i=0;i<n;i++){
			cin>>a[i];
		}
		sort(a,a+n);	printf("CASE# %d:\n",++ase);
		while(m--)
		{
			cin >> x;
			int p=lower_bound(a+1,a+n,x)-a;//早已排数组中寻找x
			
			if(a[p]==x)
                printf("%d found at %d\n",x,p+1);
            else 
                printf("%d not found\n",x);
		}
			
	}
	return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114898.html原文链接:https://javaforall.net

(0)
上一篇 2021年9月27日 下午7:00
下一篇 2021年9月27日 下午7:00


相关推荐

  • springboot 手动触发事务回滚

    springboot 手动触发事务回滚在 springboot 中 使用事务回滚 在 Controller 里面给自己需要回滚方法上加上 Transactiona 注解 1 手动抛出一个异常 thrownewRunt 2 通过方法回滚 TransactionA currentTrans setRollbackO

    2026年3月26日
    1
  • 从零开始学习java一般需要多长时间?「建议收藏」

    从零开始学习java一般需要多长时间?「建议收藏」其实学java一般要多久?因人而异,例如一个零基础的小白自学java,每天学习8个小时来算,而且在有学习资料的基础上,每天学习,从零到找到工作,起码要半年起步,而且还要有项目经验,否则是不会有公司要你的。而一个有一些基础的人,在经过有人系统的教学后,是可以很快学会掌握java的,大概3个月左右。不过java相对于C,C++java而言,java无疑简单了很多,不需要指针,不需要销毁对象,使得对ja…

    2022年7月7日
    27
  • idea maven设置本地仓库_maven更新本地仓库

    idea maven设置本地仓库_maven更新本地仓库1.file->settings2.在(1)选择Maven,在(2)加入本地Maven位置,在(3)加入到本地settings.xml下,在(4)下添加本地仓库,默认在c盘,更改本地仓库请移步3.完毕

    2022年10月3日
    3
  • 【CSS】CSS样式表+复合选择器

    【CSS】CSS样式表+复合选择器CSS样式表+复合选择器总结

    2022年7月14日
    17
  • apache struts 2 任意代码执行漏洞

    apache struts 2 任意代码执行漏洞漏洞检测地址:http://0day.websaas.cn漏洞利用工具,如下:漏洞利用,如下:step1step2step3提权思路,如下:1、开启虚拟终端,执行命令,但是,提示“连接被

    2022年7月3日
    33
  • android读取短信_android发短信代码

    android读取短信_android发短信代码在Tasker中利用短信的通知实现短信内容转发到微信之前的教程是利用Tasker自带的短信变量来实现的,这有一个无法解决问题:在360,魅族,坚果等品牌的手机中无法获取短信的消息内容。利用短信的通知则可以获取短信的内容,并且对于华为手机来说也可以不用关闭短信验证码保护功能,所以相较于原来的方法更简单,方便。应用通知的变量是一个本地数组变量%evtprm(),这个变量数组包含%evtprm…

    2022年10月13日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号