树状数组维护中位数
#include<bits/stdc++.h>
#define N 200050
#define R register
using namespace std;
int n,a[N],b[N],c[N];
int read(){
int cnt=0; char ch=0;
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))cnt=cnt*10+(ch-'0'),ch=getchar();
return cnt;
}
inline void Insert(int x,int val){for(;x<=n;x+=x&-x) c[x] += val;}
inline int find(int k){
int ans=0,cnt=0;
for(R int i=18;i>=0;i--) if(ans+(1<<i)<=n){
ans += (1<<i); if(c[ans]+cnt>=k) ans -= (1<<i);
else cnt += c[ans];
} return ans+1;
}
int main(){
n=read();
for(R int i=1;i<=n;i++) a[i] = b[i] = read();
sort(b+1,b+n+1); int siz = unique(b+1,b+n+1) - (b+1);
for(R int i=1;i<=n;i++) a[i] = lower_bound(b+1,b+siz+1,a[i]) - b;
for(R int i=1;i<=n;i++){
Insert(a[i],1); printf("%d\n",b[find((i+1)/2)]);
} return 0;
}