//人类疑惑错误!
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1e5+10;
int n,rt,cnt,pos[N],fa[N],val[N],son[N][2],size[N];
bool flag[N];
struct node{
int val,xh;
}a[N];
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
void update(int x){
size[x]=size[son[x][0]]+size[son[x][1]]+1;
}
void down(int x){
if(!flag[x])return ;
swap(son[x][0],son[x][1]);
flag[son[x][0]]^=1;
flag[son[x][1]]^=1;
flag[x]=0;
}
void rotate(int x){
int y=fa[x];
int z=fa[y];
down(y);down(x);
int k=son[fa[x]][1]==x;
son[y][k]=son[x][k^1];
//if(son[x][k^1])
fa[son[x][k^1]]=y;
son[x][k^1]=y;
fa[y]=x;
fa[x]=z;
if(z)son[z][y==son[fa[y]][1]]=x;
update(y);
update(x);
}
void splay(int x,int k){
while(fa[x]!=k){
int y=fa[x];
int z=fa[y];
if(z!=k)rotate((x==son[y][0])^(y==son[z][0])?x:y);
rotate(x);
}
if(!k)rt=x;
}
int biuld(int f,int l,int r){
if(l>r)return 0;
int mid=(l+r)>>1;
int x=++cnt;
pos[a[mid].val]=x;
val[x]=a[mid].val;
fa[x]=f;
//flag[x]=0;
son[x][0]=biuld(x,l,mid-1);
son[x][1]=biuld(x,mid+1,r);
update(x);
return x;
}
int suf(){
down(rt);
int x=son[rt][1];
while(down(x),son[x][0])x=son[x][0];
return x;
}
int cmp1(node x,node y){
return x.val==y.val?x.xh<y.xh:x.val<y.val;
}
int cmp2(node x,node y){
return x.xh<y.xh;
}
int main(){
n=read();
for(int i=1;i<=n;i++){
a[i+1].val=read();
a[i+1].xh=i+1;
//cout<<a[i+1].xh<<" "<<a[i+1].val<<endl;//
}
a[1].val=0;
a[n+2].val=n+1;
sort(a+2,a+n+2,cmp1);
/*for(int i=1;i<=n+2;i++)cout<<a[i].xh<<" "<<a[i].val<<endl;//
cout<<endl<<endl;// */
for(int i=1;i<=n;i++)a[i+1].val=i;
sort(a+2,a+n+2,cmp2);
/*for(int i=1;i<=n+2;i++)cout<<a[i].xh<<" "<<a[i].val<<endl;//
cout<<endl<<endl;//*/
rt=biuld(0,1,n+2);
//cout<<"rt "<<rt<<endl;//
/*for(int i=1;i<=n+2;i++)cout<<val[i]<<" ";cout<<endl;//
for(int i=1;i<=n+2;i++)cout<<fa[i]<<" ";cout<<endl;//
for(int i=1;i<=n+2;i++)cout<<size[i]<<" ";cout<<endl;//
for(int i=1;i<=n+2;i++)cout<<pos[i]<<" ";cout<<endl<<endl;//*/
for(int i=1;i<=n;i++){
int x=pos[i];
//cout<<"x "<<x<<endl;//
splay(x,0);
//cout<<"rt "<<rt<<endl;//
//for(int j=1;j<=n+2;j++)cout<<size[j]<<" ";cout<<endl;//<<endl;//
//cout<<" case 1"<<endl;//
//cout<<endl;//
cout<<size[son[x][0]]<<" ";
x=suf();
//cout<<"x2 "<<x<<endl;//<<endl;//
int y=pos[i-1];
splay(y,0);
//cout<<"rt2 "<<rt<<endl;//
//for(int j=1;j<=n+2;j++)cout<<size[j]<<" ";cout<<endl;//<<endl;//
//cout<<" case 2"<<endl;//
splay(x,y);
//cout<<"rt3 "<<rt<<endl;//
//for(int j=1;j<=n+2;j++)cout<<size[j]<<" ";cout<<endl;//<<endl;//
//cout<<" case 3"<<endl;//
flag[son[x][0]]^=1;
//for(int j=1;j<=n+2;j++)cout<<size[j]<<" ";cout<<endl<<endl;//
}
return 0;
}