//#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define CT printf("\n-------------------------\n");
using namespace std;
typedef long long ll;
const int inf=1<<30;
const ll Inf=1ll<<60ll;
namespace io{
	#define bufsize (1<<23)
	char buf[bufsize],*p1=buf,*p2=buf,c;int f;
//	#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,bufsize,stdin),p1==p2)?EOF:*p1++)
	template<typename T>T read(){
		T x=0;f=0;c=getchar();
		while(!isdigit(c))(c=='-')&&(f=1),c=getchar();
		while(isdigit(c))x=x*10+(c&15),c=getchar();
		return f?-x:x;
	}
	#undef bufsize
}
#define readi io::read<int>
const int N=200005;
int n,a[N],ans[N],id[N];
struct node{
	int sum,lmax,rmax;
}t[N*4];
node merge(node L,node R){
	node res;
	res.sum=L.sum+R.sum;
	res.lmax=max(L.lmax,L.sum+R.lmax);
	res.rmax=max(R.rmax,R.sum+L.rmax);
	return res;
}
void build(int o,int l,int r){
	if(l==r){
		t[o].sum=t[o].lmax=t[o].rmax=-1;
		return;
	}
	int mid=l+r>>1;
	build(o<<1,l,mid);
	build(o<<1|1,mid+1,r);
	t[o]=merge(t[o<<1],t[o<<1|1]);
}
void update(int o,int l,int r,int p,int x){
	if(l==r){
		t[o].sum=t[o].lmax=t[o].rmax=x;
		return;
	}
	int mid=l+r>>1;
	if(p<=mid) update(o<<1,l,mid,p,x);
	else update(o<<1|1,mid+1,r,p,x);
	t[o]=merge(t[o<<1],t[o<<1|1]);
}
node query(int o,int l,int r,int L,int R){
	if(L<=l&&r<=R) return t[o];
	int mid=l+r>>1;
	if(R<=mid) return query(o<<1,l,mid,L,R);
	if(L>mid) return query(o<<1|1,mid+1,r,L,R);
	return merge(query(o<<1,l,mid,L,R),query(o<<1|1,mid+1,r,L,R));
}
void calc(int tg){
	build(1,1,n);
	for(int i=1;i<=n;++i){
		int j=i;
		while(a[id[i]]==a[id[j+1]]&&j+1<=n)
			++j;
		for(int k=i;k<=j;++k)
			update(1,1,n,id[k],1);
		for(int k=i;k<=j;++k){
			node tmp0=query(1,1,n,1,id[k]),tmp1=query(1,1,n,id[k],n);
			ans[id[k]]=max(ans[id[k]],(tmp0.rmax+tmp1.lmax-1-!tg)/2);
		}
		i=j;
	}
}
bool cmp(int A,int B){
	return a[A]<a[B];
}
int main(){
//	ios::sync_with_stdio(0);
//	cin.tie(0);cout.tie(0);
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);

	n=readi();
	for(int i=1;i<=n;++i){
		a[i]=readi();
		id[i]=i;
	}
	sort(id+1,id+n+1,cmp);
//	CT
//	for(int i=1;i<=n;++i)
//		printf("%d ",id[i]);
//	CT
//	for(int i=1;i<=n;++i)
//		printf("%d ",a[id[i]]);
//	CT
	calc(0);
	for(int i=1;i+i<=n;++i){
		swap(id[i],id[n-i+1]);
	}
	for(int i=1;i<=n;++i)
		a[i]=-a[i];
//	CT
//	for(int i=1;i<=n;++i)
//		printf("%d ",id[i]);
//	CT
//	for(int i=1;i<=n;++i)
//		printf("%d ",a[id[i]]);
//	CT
	calc(1);
	for(int i=1;i<=n;++i)
		printf("%d ",ans[i]);

//	fclose(stdin);fclose(stdout);
	return 0;
}
