#include<cstdio>
#include<algorithm>
#define inf 0x7fffffff
#define N 100010
using namespace std;
inline int read()
{
int x = 0,f = 1;char ch = getchar();
while (ch < '0' || ch > '9') {if (ch == '-')f = -1;ch = getchar();}
while (ch >= '0' && ch <= '9') {x = x * 10 + ch - '0'; ch = getchar();}
return x * f;
}
struct Data{
int data,pos;
}a[N];
bool cmp1 (Data a,Data b)
{
if (a.data == b.data) return a.pos < b.pos;
return a.data < b.data;
}
int rev[N], mn[N], ch[N][2], mnpos[N], data[N], fa[N], size[N], n, root;
inline void pushdown (int x)
{
if (rev[x])
{
rev[x] = 0;
rev[ch[x][0]] ^= 1;
swap(ch[ch[x][0]][0], ch[ch[x][0]][1]);
rev[ch[x][1]] ^= 1;
swap(ch[ch[x][1]][0], ch[ch[x][1]][1]);
}
}
inline void pushup (int x)
{
mn[x] = min(data[x], min(mn[ch[x][0]], mn[ch[x][1]]));
if(mn[x] == data[x]) mnpos[x] = x;
else if (mn[x] == mn[ch[x][0]]) mnpos[x] = mnpos[ch[x][0]];
else mnpos[x] = mnpos[ch[x][1]];
size[x] = size[ch[x][0]] + size[ch[x][1]] + 1;
}
inline int son (int x)
{
return ch[fa[x]][1] == x;
}
inline void rotate (int x)
{
int y = fa[x], z = fa[y], b = son(x), c = son(y), a = ch[x][!b];
if (z) ch[z][c] = x; else root = x; fa[x] = z;
if (a) fa[a] = y; ch[y][b] = a;
ch[x][!b] = y; fa[y] = x;
pushup(y); pushup(x);
}
void splay (int &x,int i)
{
while(fa[x] != i)
{
int y = fa[x], z = fa[y];
if(z == i)
rotate (x);
else
{
pushdown (z); pushdown (y); pushdown (x);
if(son (x) == son (y))
rotate (y); rotate (x);
else
rotate (x); rotate (x);
}
}
}
inline int getkth (int k,int rt)
{
pushdown (rt);
if(k == size[ch[rt][0]] + 1) return rt;
if(k < size[ch[rt][0]] + 1) return getkth (k, ch[rt][0]);
return getkth (k - 1 - size[ch[rt][0]], ch[rt][1]);
}
inline void reverse (int l, int r)
{
int ll = getkth (l - 1, root),rr = getkth (r + 1, root), p;
splay(ll, 0); splay(rr, ll);
p = ch[rr][0]; rev[p] ^= 1;
swap(ch[p][0], ch[p][1]);
}
inline int getmnpos (int l, int r)
{
int ll = getkth (l - 1, root);
int rr = getkth (r + 1, root);
splay(ll, 0);
splay(rr, ll);
return mnpos[ch[rr][0]];
}
void dfs (int x)
{
if( !x ) return;
pushdown (x);
dfs (ch[x][0]);
printf("%d ",x);
dfs (ch[x][1]);
}
int main()
{
n = read();
for(int i = 2; i <= n + 1; i ++)
{
data[i] = read();
a[i].data = data[i];
a[i].pos = i;
}
sort(a + 2, a + n + 2, cmp1);
for(int i = 2; i <= n + 1; i ++)
data[a[i].pos] = i;
for(int i = 0; i <= n + 2; i ++) mn[i] = inf;
data[0] = inf; data[1] = inf; data[n + 2] = inf; root = 1; size[0] = 0;
for(int i = 1; i <= n + 2; i ++)
{
fa[i] = i - 1;
ch[i][1] = i + 1;
}
ch[n + 2][1] = 0;
for(int i = n + 2; i >= 1; i --)
pushup (i);
for(int i = 1; i <= n; i ++)
{
int p = getmnpos (i + 1, n + 1);
splay (p, 0);
printf("%d",size[ch[p][0]]);
reverse(i + 1, size[ch[p][0]] + 1);
if(i != n) printf(" ");
}
printf("\n");
return 0;
}