#include<iostream>
#include<cstdio>
using namespace std;
int a[1000000],b[100000];
int find(int a[],int n,int goal)
{
int min=0,max=n-1;
if(a[0]==goal) return 1;
if(a[n-1]==goal){
int p=n-1;
while(a[p]==a[p-1])
p--;
return p+1;
}
do{
if(a[(min+max)/2]!=goal)
goal>a[(min+max)/2]?min=(min+max)/2:max=(min+max)/2;
else{
int p=(min+max)/2;
while(a[p]==a[p-1])
p--;
return p+1;
}
}while(max-min>1);
return -1;
}
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 main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
a[i]=read();
for(int i=0;i<m;i++)
b[i]=read();
for(int i=0;i<m;i++)
cout<<find(a,n,b[i])<<" ";
return 0;
}
感觉不是死循环的问题。。