用的是结构体记录每个元素最先出现的位置,然后二分查找
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN = 1e6+10;
ll a[MAXN];
int cur = 0;
bool flag[MAXN];
struct node{
int data,pos;
}data_base[MAXN/2];
int bin_s(int targ){
int l = 0,r = --cur;
while(l <= r){
int mid = (l+r)/2;
if(data_base[mid].data > targ){
r = mid-1;
}
else if(data_base[mid].data < targ){
l = mid+1;
}
else{
return data_base[mid].pos;
}
}
return -1;
}
int main(){
int n,m;
cin>>n>>m;
for(int i = 1; i <= n; i ++){
cin>>a[i];
if(flag[a[i]] == false){
data_base[cur].data = a[i];
data_base[cur++].pos = i;
}
else{
continue;
}
}
for(int i = 0; i <= m-1; i ++){
int findd;
cin>>findd;
cout<<bin_s(findd)<<" ";
}
return 0;
}