#include <stdio.h>
#include <iostream>
using namespace std;
const int N=1e6+4;
long long int num[N]={0};
int binsearch(int l,int r,long long int q ){
if(l>r) return -1;
int mid=(l+r)/2;
int k=mid;
if(q==num[mid]) {
if(binsearch(l,mid-1,q)!=-1){
return binsearch(l,mid-1,q);
mid=k;
}else{
mid=k;
return mid;
}
}
if(q>num[mid]){
return binsearch(mid+1,r,q);
}else{
return binsearch(l,mid-1,q);
}
return -1;
}
int main(){
int n,m,i;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++){
scanf("%lld",&num[i]);
}
for(int j=0;j<m;j++){
long long int q;
scanf("%lld ",&q);
printf("%d ",binsearch(1,i,q));
}
return 0;
}
大致思路:就是手写了二分,外加了当有多个重复数字时输出第一次出现的位置