//map左侧优先
define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
using namespace std;
int n, m, a[1000010];
map<int, int> ma;
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> a[i];
cout << !ma[a[i]] << " ";
//if (!ma[a[i]]) {//判断,只记录第一个
ma[a[i]] = i;//记录编号
}
for (int i = 1; i <= m; i++) {
int q;
cin >> q;
if (!ma[q]) cout << -1 << " ";//如果里面没有输出-1
else cout << ma[q] << " ";//否则输出编号
}
return 0;
}
二分法左侧优先
若没有,为第一个最大的位置
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <set>
#include <vector>
#include <map>
using namespace std;
typedef long long ll;
int main()
{
ll n, m;
ll x;
ll s = 1;
int a[1000];
ll low;
ll high;
ll mid;
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
for (int i = 1; i <= m; i++)
{
cin >> x;
low = 1;
high = n;
while (low < high)
{
mid =(high+low) / 2;
if (a[mid] == x)
{
high = mid;
}
if (a[mid] > x)
high = mid;
if (a[mid] < x)
low=mid+1 ;
}
if (a[high] == x)
cout << high << " ";
else
cout << "-1" << " ";
}
return 0;
}