序号:615
二分查找
Time Limit:1s Memory Limit:128MB
题目描述:
已有n个整数(从1开始编号),询问k次,每次输入一个数x,需要查找x在n个整数中的位置,若不存在则输出-1。
输入格式:
5 5
第一行包括两个整数n,k(n<=10 )表示有n个数,k(k<=10 )表示k个询问。
第二行有n个整数,表示数组中的所有数。(所有保证从小到大排列)
第三行有k个整数,表示每次查找的数字。
输出格式:
共k行,第i行表示第i个询问数字的下标位置,存在则输出该数字第一次出现的位置,不存在输出-1。
输入样例:
10 2
1 3 3 4 5 7 8 8 9 9
2 5
输出样例:
-1
5
#include<bits/stdc++.h>
using namespace std;
long long a[1010100],n,l,r,k,mid;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>k;
for(long long i=1;i<=n;i++){
cin>>a[i];
}
while(k--){
long long x;
cin>>x;
l=1;
r=n;
while(l<r){
mid=(l+r)/2;
if(x<=a[mid]){
r=mid;
}else{
l=mid+1;
}
}
if(a[l]==x){
cout<<l<<"\n";
}else{
cout<<"-1\n";
}
}
return 0;
}