二分查找

//二分查找
//也可以用lower_bound/upper_bound实现
#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 1000001;
int n,m;
int a[N],b[N];

int find(int left,int right,int x){
int mid=(left+right)/2;
if(left==right&&x==a[right]) return right;
if(left==right&&x!=a[right]) return -1;
if(x<=a[mid]) return find(left,mid,x); //可能mid前面有和它相等的值
if(x>a[mid]) return find(mid+1,right,x);
}

int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=m;i++){
scanf("%d",&b[i]);
printf("%d ",find(1,n,b[i]));
}
return 0;
}

posted @ 2021-03-28 13:10  starlightlmy  阅读(41)  评论(0)    收藏  举报