照着书上抄的,为什么20分啊QAQ
#include<bits/stdc++.h>
using namespace std;
const int N=200001;
struct node{
int lc,rc,key,pri,cnt,siz;
#define lc(x) t[x].lc
#define rc(x) t[x].rc
#define v(x) t[x].key
#define p(x) t[x].pri
#define c(x) t[x].cnt
#define s(x) t[x].siz
}t[N];
int n,m,a[N],u,tmp,num,T,rt;
inline int read(){
int f=1,x=0;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-f;c=getchar();}
while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
return x*f;
}
inline void print(int x){
if(x<0){putchar('-');print(-x);}
else if(x>9){print(x/10);putchar(x%10+'0');}
else putchar(x+'0');
}
inline void upd(const int &k){s(k)=s(lc(k))+s(rc(k))+c(k);}
inline void zig(int &k){
int y=lc(k);
lc(k)=rc(y);rc(y)=k;
s(y)=s(k);upd(k);k=y;
}
inline void zag(int &k){
int y=rc(k);
rc(k)=lc(y);lc(y)=k;
s(y)=s(k);upd(k);k=y;
}
inline void insert(int &k,const int &key){
if(!k){
k=++T;v(k)=key;p(k)=rand();
c(k)=s(k)=1;lc(k)=rc(k)=0;
return ;
}
else s(k)++;
if(v(k)==key)c(k)++;
else if(key<v(k)){
insert(lc(k),key);
if(p(lc(k))<p(k))zig(k);
}
else{
insert(rc(k),key);
if(p(rc(k))<p(k))zag(k);
}
return ;
}
inline int kth(int k){
int x=rt;
while(x){
if(s(lc(x))<k&&s(lc(x))+c(x)>=k)return v(x);
if(s(lc(x))>=k)x=lc(x);
else k-=s(lc(x))+c(x),x=rc(x);
}
return 0;
}
int main(){
//freopen("blackbox.in","r",stdin);
//freopen("blackbox.out","w",stdout);
n=read();m=read();
for(int i=1;i<=n;i++)a[i]=read();
for(int i=1;i<=m;i++){
u=read();
while(tmp<=u)insert(rt,a[++tmp]);
print(v(kth(i))),putchar('\n');
}
return 0;
}