#include<iostream>#include<algorithm>#include<math.h>
using namespace std;constint Len =1e5+5;int n,m;int ar[Len];int ans;
bool Binary_search(int l ,int r ,int tem){if(tem >= ar[r])return false;if(tem < ar[l]){
ans = l;return true;}while(r > l +1)//while循环里面的两个判断条件很重要,只有这样才能取到可能的值,不会出错{int mid =(l + r)/2;if(ar[mid]> tem)
r = mid;//还有这个地方同样要注意,一定要让r = mid 否则有可能把合适的值个漏去else
l = mid;//同理}if(ar[r]== tem)
ans = r +1;else
ans = r;return true;}intmain(){// freopen("T.txt","r",stdin);scanf("%d %d",&n,&m);for(int i =1; i <= n; i ++)scanf("%d",&ar[i]);sort(ar +1, ar +1+ n);while(m --){int tem;scanf("%d",&tem);if(Binary_search(1, n , tem))printf("%d\n",ar[ans]);elseprintf("-1\n");}return0;}
/*
这一题其实只要明白一点,就是一个沙雕题,题目让我们统计某个数出现的次数,我们只需要找 那个数在经过排序后的数组ar[]中的位置,
一旦有了这个位置,我们通过这位置向两边延伸,用for循环找到所有值为 要查找值 出现的次数
当然如果 找不到要查找到那个值的位置,直接输出 0 就ok了
*/#include<iostream>#include<algorithm>
using namespace std;constint Len =1e5+5;int n,m;int ar[Len];int pos;
bool Binary_search(int l ,int r ,int tem){if(tem > ar[r]|| tem < ar[l]){return false;}while(r >= l){int mid =(r + l)/2;if(ar[mid]> tem)
r = mid -1;elseif(ar[mid]< tem)
l = mid +1;else{
pos = mid;return true;}}return false;}intmain(){// freopen("T.txt","r",stdin);scanf("%d %d",&n,&m);for(int i =1; i <= n; i ++)scanf("%d",&ar[i]);sort(ar +1, ar +1+ n);while(m --){int tem;scanf("%d",&tem);if(Binary_search(1, n , tem)){int ans =1;for(int a = pos +1; a <= n; a ++)if(ar[a]== tem)
ans ++;elsebreak;for(int b = pos -1; b >=1; b --)if(ar[b]== tem)
ans ++;elsebreak;printf("%d\n",ans);}elseprintf("0\n");}return0;}