#include<iostream>
#include<algorithm>
#include<map>
#include<vector>
using namespace std;const int N=1e6+10;
int main(){
int n,k,x;
map<int,vector<int>>m;
cin>>n>>k;for(int i=0;i<n;i++){
cin>>x;
m[x].push_back(i+1);}for(int i=0;i<k;i++){
cin>>x;if(m.find(x)==m.end())
cout<<-1;else
cout<<m[x][0];
cout<<" ";}return0;}
手动二分查找(AC)
#include<iostream>
#include<algorithm>
#include<map>
#include<vector>
using namespace std;const int N=1e6+10;
int a[N];
int find1(int l,int r,int x){
int m=(l+r)/2;if(l==r){if(a[m]!=x)//查找失败 return-1;if(x==a[m])//查找成功返回下标 return m+1;}elseif(x>a[m])find1(m+1,r,x);//查找右边 elseif(x<=a[m])find1(l,m,x);//查找左边 }
int main(){
int n,k,x;
cin>>n>>k;for(int i=0;i<n;i++){
cin>>a[i];}for(int i=0;i<k;i++){
cin>>x;
int s=find1(0,n-1,x);
cout<<s<<" ";}return0;}
STL lower_bound()
#include<iostream>
#include<algorithm>
#include<map>
#include<vector>
using namespace std;const int N=1e6+10;
int a[N];
int main(){
int n,k,x;
cin>>n>>k;for(int i=0;i<n;i++){
cin>>a[i];}for(int i=0;i<k;i++){
cin>>x;
int s=lower_bound(a,a+n,x)-a;if(a[s]==x)
cout<<s+1<<" ";else
cout<<-1<<" ";}return0;}