目录
问题 C: 二分查找(多组数据)
时间限制: 1 Sec 内存限制: 128 MB
提交: 340 解决: 113
题目描述
在一个上升序列中,进行m次查找给定数值的位置。
输入
第一行包含两个整数n、m。n为上升序列长度,m为查询的次数。(1 <= n<= 100000,1 <= m <= 10000)
第二行包含n个整数,值在0-1亿之间。
第三行包含m个整数,为要询问的每个数值x。
输出
一行,m个整数。表示m次询问的每个x在序列中的位置,如不存在输出“-1”
样例输入
5 2 2 5 8 10 12 8 10
样例输出
3 4
提示
CODE:
#include<cstdio>
#include<algorithm>//用到lower_bound
using namespace std;
const int MAXN=1e6+10;//注意范围
int read(){//快读
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
int a[MAXN];
int main(){
int n=read(),m=read();//读入
for(int i=1;i<=n;i++) a[i]=read();
while(m--){
int x=read();
int ans=lower_bound(a+1,a+n+1,x)-a;//二分搜,注意-a
if(x!=a[ans]) printf("-1 ");//没有,输出-1
else printf("%d ",ans);//有,输出ans
}
return 0;//华丽结束
}