rt,本地运行#9数据无错,提交却提示我200001行太长,可是我的200001行是200000个数据的换行符,理论上应该自动忽略 Record
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2*1e5+1;
ll n,m,u[N],l[N],cnt=1;
struct nn{
ll v,id;
}a[N];
inline bool cmp(nn a,nn b)
{
return a.v<b.v;
}
struct node{
ll l,r,v;
};
struct Tree{
node Tr[N<<2];
inline ll ls(ll id){return id<<1;}
inline ll rs(ll id){return id<<1|1;}
inline void pushup(ll id)
{
Tr[id].v=Tr[ls(id)].v+Tr[rs(id)].v;
return;
}
inline void build(ll id,ll l,ll r)
{
Tr[id].l=l,Tr[id].r=r;
if(l==r)
{
return;
}
ll mid=l+r>>1;
build(ls(id),l,mid),build(rs(id),mid+1,r);
pushup(id);
return;
}
inline void modify(ll id,ll p)
{
if(Tr[id].l==p&&Tr[id].r==p)
{
Tr[id].v++;
return;
}
ll mid=Tr[id].l+Tr[id].r>>1;
if(p<=mid)modify(ls(id),p);
if(p>mid)modify(rs(id),p);
pushup(id);
return;
}
inline ll query(ll id,ll p)
{
if(Tr[id].l==Tr[id].r)
{
return Tr[id].l;
}
if(Tr[ls(id)].v>=p)return query(ls(id),p);
else return query(rs(id),p-Tr[ls(id)].v);
}
}T;
int main()
{
// freopen("1.in","r",stdin);
// freopen("1.out","w",stdout);
cin>>m>>n;
for(int i=1;i<=m;i++)cin>>a[i].v,a[i].id=i;
for(int i=1;i<=n;i++)cin>>u[i];
T.build(1,1,m);
sort(a+1,a+m+1,cmp);
for(int i=1;i<=m;i++)l[a[i].id]=i;
for(int i=1;i<=m;i++)
{
T.modify(1,l[i]);
while(i==u[cnt])
{
printf("%lld\n",a[T.query(1,cnt)].v);
++cnt;
}
}
return 0;
}