/*#include<stdio.h>
long long int ms(long long int s,long long int e,long long int k)
{
//printf("\ns:%lld e:%lld\n",s,e);
if(s==e)
{
return s;
}
long long int mid=(s+e)/2;
long long int unmid=(s+e-2)/2;
if(mid*mid==k)
{
return mid;
}
if(mid*mid>k)
{
if(unmid*unmid<=k)
{
return unmid;
}
return ms(s,unmid-1,k);
}
else
{
return ms(mid+1,e,k);
}
}
int main()
{
long long int arr[11]={};
int x,i,j;
long long int z,y;
scanf("%d",&x);
for(i=1; i<=x; i++)
{
scanf("%lld",&arr[i]);
}
for(i=1; i<=x; i++)
{
y=ms(1,arr[i],arr[i]);
z=y*y;
printf("%lld\n",z);
}
}
*/
/*
#include<stdio.h>
int arr[1000000]={},temp;
void quick(int s, int e)
{
//변수 생성
int l=s,r=e+1,p=s;
//함수 끝 조건
if(s>=e)
{
return;
}
//정렬
do
{
//pivot의 위치의 수보다 큰 수 찾기
do
{
l++;
}while(arr[l]<arr[p]);
//pivot의 위치의 수보다 작은 수 찾기
do
{
r--;
}while(arr[r]>arr[p]);
//right와 left 교체
if(l<r)
{
temp=arr[l];
arr[l]=arr[r];
arr[r]=temp;
}
}while(l<r);
//pivot과 right 교체
temp=arr[r];
arr[r]=arr[p];
arr[p]=temp;
//재귀
quick(s,r-1);
quick(r+1,e);
}
int main()
{
int x,i;
scanf("%d",&x);
for(i=1; i<=x; i++)
{
scanf("%d",&arr[i]);
}
quick(1,x);
for(i=1; i<=x; i++)
{
printf("%d\n",arr[i]);
}
}
*/
#include<stdio.h>
int arr[500001]={},temp,x;
void quick(int s, int e)
{
int l=s,r=e+1,p=s;
if(s>=e)
{
return;
}
do
{
do
{
l++;
}while(arr[l]<arr[p]);
do
{
r--;
}while(arr[r]>arr[p]);
if(l<r)
{
temp=arr[l];
arr[l]=arr[r];
arr[r]=temp;
}
}while(l<r);
temp=arr[r];
arr[r]=arr[p];
arr[p]=temp;
quick(s,r-1);
quick(r+1,e);
}
void bs(int s, int e, int k)
{
if(s>e)
{
printf("-1 ");
return 0;
}
int mid = (s+e)/2;
if(arr[mid]==k)
{
printf("%d ",mid-1);
return 0;
}
else if(arr[mid]<k)
{
bs(mid+1,e,k);
}
else
{
bs(s,mid-1,k);
}
}
int main()
{
int arrr[500001]={},i,j,n;
scanf("%d",&x);
for(i=1; i<=x; i++)
{
scanf("%d",&arr[i]);
arrr[i]=arr[i];
}
quick(1,x);
for(j=1; j<=x; j++)
{
bs(1,x,arrr[j]);
}
}



