// ROOT : DRAGON3012009 : Wa In Real Life
#include <bits/stdc++.h>
#define ll long long
#define el "\n"
#define _ROOT_ int main()
#define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
#define FORD(i,r,l) for(int i = r ; i >= l ; i --)
#define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
#define fi first
#define se second
#define M 1000000007
#define MAXN 1000001
#define INF (1ll<<60)
#define NAME "file"
#define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
using namespace std;
const ll MOD[] = {(ll)1e9 + 2277, (ll)1e9 + 5277, (ll)1e9 + 8277, (ll)1e9 + 9277, (ll) 1e9 + 7 };
const ll NMOD = 1;
ll n, q ;
ll a[MAXN];
ll lab[MAXN ] ;
bool active[MAXN ] ;
ll ans ;
vector<ll> cpr ;
ll find_set(ll a )
{
return lab[a] < 0 ? a : lab[a] = find_set(lab[a]) ;
}
bool union_set(ll a, ll b )
{
if(!active[a]) return false ;
if(!active[b]) return false ;
a = find_set(a) ;
b = find_set(b) ;
if(a == b ) return false ;
if(lab[a] > lab[b]) swap(a, b ) ;
ans -= (-lab[a] + 1 ) / 2 ;
ans -= (-lab[b] + 1 ) / 2 ;
// cout << a << " " << b << " " << ans << " data " << el ;
lab[a] += lab[b] ;
ans += (-lab[a] + 1 ) / 2 ;
lab[b] = a ;
return true ;
}
void init()
{
cin >> n ;
FOR(i, 1, n ) cin >> a[i] ;
}
void solve()
{
memset(lab , - 1 , sizeof lab ) ;
FOR(i , 1 , n ) {
if(active[a[i]] == false ) ans ++ ;
active[a[i]] = true ;
union_set(a[i] , a[i] - 1 ) ;
union_set(a[i] , a[i] + 1 ) ;
cout << ans << " " ;
}
}
_ROOT_
{
// freopen(NAME".inp" , "r" , stdin);
// freopen(NAME".out" , "w", stdout) ;
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 1; // cin >> t ;
while(t--)
{
init();
solve();
}
return (0&0);
}
Ly8gUk9PVCA6IERSQUdPTjMwMTIwMDkgOiBXYSBJbiBSZWFsIExpZmUKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZWwgIlxuIgojZGVmaW5lIF9ST09UXyBpbnQgbWFpbigpCiNkZWZpbmUgRk9SKGksbCxyKSBmb3IoaW50IGkgPSBsIDsgaSA8PSByIDsgaSArKykKI2RlZmluZSBGT1JEKGkscixsKSBmb3IoaW50IGkgPSByIDsgaSA+PSBsIDsgaSAtLSkKI2RlZmluZSBSRVAoaSwgYSApIGZvcihpbnQgaSA9IDAgOyBpIDwgYSA7IGkgKysgKQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgTSAxMDAwMDAwMDA3CiNkZWZpbmUgTUFYTiAxMDAwMDAxCiNkZWZpbmUgSU5GICgxbGw8PDYwKQojZGVmaW5lIE5BTUUgImZpbGUiCiNkZWZpbmUgY29tcGFyZSh2KSBzb3J0KCh2KS5iZWdpbigpLCAodikuZW5kKCkpOyAodikuZXJhc2UodW5pcXVlKCh2KS5iZWdpbigpLCAodikuZW5kKCkpLCAodikuZW5kKCkpOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBsbCBNT0RbXSA9IHsobGwpMWU5ICsgMjI3NywgKGxsKTFlOSArIDUyNzcsIChsbCkxZTkgKyA4Mjc3LCAobGwpMWU5ICsgOTI3NywgKGxsKSAxZTkgKyA3IH07CmNvbnN0IGxsIE5NT0QgPSAxOwoKbGwgbiwgcSA7CmxsIGFbTUFYTl07CmxsIGxhYltNQVhOIF0gOwpib29sIGFjdGl2ZVtNQVhOIF0gOwpsbCBhbnMgOwp2ZWN0b3I8bGw+IGNwciA7CgpsbCBmaW5kX3NldChsbCBhICkKewogICAgcmV0dXJuIGxhYlthXSA8IDAgPyBhIDogbGFiW2FdID0gZmluZF9zZXQobGFiW2FdKSA7Cn0KCmJvb2wgdW5pb25fc2V0KGxsIGEsIGxsIGIgKQp7CiAgICBpZighYWN0aXZlW2FdKSByZXR1cm4gZmFsc2UgOwogICAgaWYoIWFjdGl2ZVtiXSkgcmV0dXJuIGZhbHNlIDsKICAgIGEgPSBmaW5kX3NldChhKSA7CiAgICBiID0gZmluZF9zZXQoYikgOwogICAgaWYoYSA9PSBiICkgcmV0dXJuIGZhbHNlIDsKICAgIGlmKGxhYlthXSA+IGxhYltiXSkgc3dhcChhLCBiICkgOwogICAgYW5zIC09ICgtbGFiW2FdICsgMSApIC8gMiA7CiAgICBhbnMgLT0gKC1sYWJbYl0gKyAxICkgLyAyIDsKLy8gICAgY291dCA8PCBhIDw8ICIgIiA8PCBiIDw8ICIgIiA8PCBhbnMgPDwgIiBkYXRhICIgPDwgZWwgOwogICAgbGFiW2FdICs9IGxhYltiXSA7CiAgICBhbnMgKz0gKC1sYWJbYV0gICsgMSApIC8gMiA7CiAgICBsYWJbYl0gPSBhIDsKICAgIHJldHVybiB0cnVlIDsKfQoKCnZvaWQgaW5pdCgpCnsKICAgIGNpbiA+PiBuIDsKICAgIEZPUihpLCAxLCBuICkgY2luID4+IGFbaV0gOwp9Cgp2b2lkIHNvbHZlKCkKewogICAgbWVtc2V0KGxhYiAsIC0gMSAsIHNpemVvZiBsYWIgKSA7CiAgICBGT1IoaSAsIDEgLCBuICkgewogICAgaWYoYWN0aXZlW2FbaV1dID09IGZhbHNlICkgYW5zICsrIDsKICAgIGFjdGl2ZVthW2ldXSA9IHRydWUgOwoKICAgIHVuaW9uX3NldChhW2ldICwgYVtpXSAtIDEgKSA7CiAgICB1bmlvbl9zZXQoYVtpXSAsIGFbaV0gKyAxICkgOwogICAgY291dCA8PCBhbnMgPDwgIiAiIDsKICAgIH0KfQoKX1JPT1RfCnsKICAgIC8vIGZyZW9wZW4oTkFNRSIuaW5wIiAsICJyIiAsIHN0ZGluKTsKICAgIC8vIGZyZW9wZW4oTkFNRSIub3V0IiAsICJ3Iiwgc3Rkb3V0KSA7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwogICAgaW50IHQgPSAxOyAvLyBjaW4gPj4gdCA7CiAgICB3aGlsZSh0LS0pCiAgICB7CiAgICAgICAgaW5pdCgpOwogICAgICAgIHNvbHZlKCk7CiAgICB9CiAgICByZXR1cm4gKDAmMCk7Cn0K