因为n最大为1e6,所以肯定不能暴力枚举(逃跑吧,我的挚爱),那么显而易见只能二分。
二分其实初中求就用过,所以直接上代码:
#include <bits/stdc++.h>
using namespace std;
int a[1000010];//居然是6次方……
int main(){
int n,m,b;
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=m;i++){
cin>>b;
if(a[1]==b)
cout<<'1'<<' ';
else{
int l=1,r=n;
int j=n/2;
while(1){//二分 ,将左右范围拉小
if(a[j]<b)l=j;// 该数为左边界
if(a[j]>=b)r=j;//该数为右边界
if(r-l==1){//不能再缩小
if(a[r]==b)
cout<<r<<' ';
else
cout<<"-1"<<' ';
break;
}
j=l+(r-l)/2;
}
}
}
return 0;
}