#include<iostream>
using namespace std;
const int maxn=1000001;
struct tree{
int val,n1,n2,siz,cnt;
};
tree a[maxn];
int tot;
void cr(int u,int w){
if(tot==0){
a[++tot].val=w;
a[tot].siz=a[tot].cnt=1;
return;
}
a[u].siz++;
if(w==a[u].val){
a[u].cnt++;
return;
}
if(w<a[u].val){
if(a[u].n1!=0)cr(a[u].n1,w);
else{
a[++tot].val=w;
a[tot].cnt=a[tot].siz=1;
a[u].n1=tot;
}
return;
}
else
{
if(a[u].n2!=0)cr(a[u].n2,w);
else{
a[++tot].val=w;
a[tot].cnt=a[tot].siz=1;
a[u].n2=tot;
}
return;
}
}
int cz(int u,int k){
if(u==0)return -2147483647;
int lsz=a[a[u].n1].siz;
if(lsz>=k)return cz(a[u].n1,k);
if(lsz+a[u].cnt<k)return cz(a[u].n2,k-lsz-a[u].cnt);
return a[u].val;
}
int pm(int u,int w){
if(u==0)return 1;
int lsz=a[a[u].n1].siz;
if(a[u].val==w)return lsz+1;
if(a[u].val>w)return pm(a[u].n1,w);
return pm(a[u].n2,w)+lsz+a[u].cnt;
}
long long pp[maxn];
int main(){
int n,m,pre=0;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>pp[i];
}
for(int i=1;i<=m;i++){
int x;
cin>>x;
for(int i=pre+1;i<=x;i++)cr(1,pp[i]);
pre=x;
cout<<cz(1,i)<<endl;
}
return 0;
}
评测记录