rt
#include<bits/stdc++.h>
#define M(x,y) memset(x,y,sizeof(x))
#define rep(i,x,y) for(int i=(x);i<=(y);++i)
#define per(i,x,y) for(int i=(x);i>=(y);--i)
inline int max(int a,int b){return a>b?a:b;}
inline int min(int a,int b){return a<b?a:b;}
inline void swap(int & x,int & y){x^=y^=x^=y;}
inline int read()
{
int x=0,s=1;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())if(ch=='-')s=-1;
for(;isdigit(ch);ch=getchar())x=x*10+ch-48;
return x*s;
}
const int N=200010;
const int INF=INT_MAX;
namespace Splay
{
int root;
struct trees
{
int cnt,siz,fa,val;
int ch[2];
}node[N];
int cnt;
void updata(int x){node[x].siz=node[node[x].ch[0]].siz+node[node[x].ch[1]].siz+node[x].cnt;}
int get(int x){return node[node[x].fa].ch[1]==x;}
void cnct(int x,int fa,int f){node[fa].ch[f]=x;node[x].fa=fa;}
void rotate(int x)
{
int y=node[x].fa,z=node[y].fa;
int f=get(x);
cnct(x,z,get(y));
cnct(node[x].ch[f^1],y,f);
cnct(y,x,f^1);
updata(x);updata(y);
}
void splay(int x,int goal)
{
for(;node[x].fa^goal;rotate(x))
{
int y=node[x].fa,z=node[y].fa;
if(z^goal)node[z].ch[1]^y^node[y].ch[1]^x?rotate(x):rotate(y);
}
if(!goal)root=x;
}
void insert(int x)
{
int u=root,fa=0;
while(x^node[u].val && u)fa=u,u=node[u].ch[x>node[u].val];
if(u)node[u].cnt++;
else
{
u=++cnt;
if(fa)node[fa].ch[x>node[fa].val]=u;
node[u].cnt=node[u].siz=1;
node[u].fa=fa;
node[u].val=x;
node[u].ch[0]=node[u].ch[1]=0;
}
splay(u,0);
}
void find(int x)
{
int u=root;
if(!u)return ;
while(x^node[u].val && node[u].ch[x>node[u].val])u=node[u].ch[x>node[u].val];
splay(u,0);
}
int kth(int x)
{
int u=root;
if(node[u].siz<x)return 0;
while(true)
{
int y=node[u].ch[0];
if(node[u].cnt+node[y].siz<x)
{
x-=node[u].cnt+node[y].siz;
u=node[u].ch[1];
}
else if(node[y].siz>=x)u=y;
else return node[u].val;
}
}
}using namespace Splay;
signed main()
{
int n=read();
insert(INF);insert(-INF);
rep(i,1,n)insert(read());
rep(i,1,n)printf("%lld ",kth(i+1));
return 0;
}