#include<bits/stdc++.h>
#define N (int)2e5+5
using namespace std;
struct node{
int key,val,si,l,r;
}tr[N*2];
void push_up(int u){
tr[u].si=tr[tr[u].l].si+tr[tr[u].r].si+1;
return;
}
int a[N],b[N],t=1;
int rt,dl,dr,temp,tot;
void split(int u,int x,int &l,int &r){
if(u==0){
l=r=0;
return;
}
if(tr[u].key<=x){
l=u;
split(tr[u].r,x,tr[u].r,r);
}
else{
r=u;
split(tr[u].l,x,l,tr[u].l);
}
push_up(u);
}
int merge(int l,int r){
if(!l||!r)
return l+r;
if(tr[l].key<=tr[r].key){
tr[l].r=merge(tr[l].r,r);
push_up(l);
return l;
}
else{
tr[r].l=merge(l,tr[r].l);
push_up(r);
return r;
}
}
int get_rand(int x){
tr[++tot].key=x;
tr[tot].val=rand();
tr[tot].si=1;
return tot;
}
void add(int x){
split(rt,x-1,dl,dr);
rt=merge(merge(dl,get_rand(x)),dr);
}
int get_rk(int u,int x){
int res=tr[tr[u].l].si+1;
if(res==x)return tr[u].key;
else if(res<x)return get_rk(tr[u].r,x-res);
else return get_rk(tr[u].l,x);
}
int n,m;
int main(){
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=m;i++)cin>>b[i];
for(int i=1;i<=n;i++){
add(a[i]);
while(b[t]==i){
cout<<get_rk(rt,t)<<endl;
t++;
}
}
return 0;
}
评测记录