/*
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello world!\n");
return 0;
}
*/
/*
#include <stdio.h>
int a[100001]= {};
int n; -----2633 탐색기반설계 Lower Bound
int bs(int s,int e,int k) //n을 받는 방법이 중요함(전체에다가 받아버리기)
{
int mid=(s+e)/2;
if(s>=e) //종료조건
{
return mid;
}
else if(a[mid]>=k)
{
bs(s,mid,k) ;
}
else if(a[mid]<k)
{
bs(mid+1,e,k);
}
}
int main()
{
int k,i,x;
scanf("%d %d",&n,&k);
for(i=1; i<=n; i++)
{
scanf("%d",&a[i]);
}
if(a[n]<k)
{
printf("%d",n+1);
}
else
{
printf("%d",bs(1,n,k));
}
return 0;
}
*/
/*
#include <stdio.h>
int a[100001]= {};
//quick_sort
void qs(int s,int e) // arr[s] ~ arr[e]까지 정렬하세요
{
int p=s; //기준값의 위치는 맨처음 (p=pivot)
int low=s,high=e+1;
if(s>=e) return ;
do
{
do //(do 안쓰고 그냥 while로 해도 되는데 시간초과 뜸)
{
low++;
}while(a[p]>a[low]);
do
{
high--;
}while(a[p]<a[high]); ----------------1452 데이터 정렬 데이터 정렬(large)
//a[low]와 a[high] 교환
if(low<high)
{
int tmp=a[low];
a[low]=a[high];
a[high]=tmp;
}
}while(low<high);
// a[p]값을 기준으로 작은건 왼쪽, 큰건 오른쪽
int tmp=a[p];
a[p]=a[high]; //(대략 두번 정도 하면 정렬이 되는듯)
a[high]=tmp;
qs(s,high-1);
qs(high+1,e);
}
int main()
{
int k,i,n;
scanf("%d",&n);
for(i=1; i<=n; i++)
{
scanf("%d",&a[i]);
}
qs(1,n);
for(i=1;i<=n;i++)
{
printf("%d\n",a[i]);
}
}
*/
#include <stdio.h> //퀵 정렬로 순서 만들고 탐색으로 숫자 바꾸고 원래 순서로 출력하기
int a[50001]= {};
int d[50001]= {};
int x;
void qs(int s,int e)
{
int p=s;
int low=s,high=e+1;
if(s>=e)
return ;
do
{
do
{
low++;
}
while(a[p]>a[low]);
do
{
high--;
}
while(a[p]<a[high]);
if(low<high)
{
int tmp=a[low];
a[low]=a[high];
a[high]=tmp;
}
}
while(low<high);
int tmp=a[p];
a[p]=a[high];
a[high]=tmp;
qs(s,high-1);
qs(high+1,e);
//(퀵 정렬)
}
int bs(int s,int e, int x)
{
int mid=(s+e)/2;
if(s>e)
{
return -1;
}
else if(a[mid]==x)
{
return mid;
}
else if(a[mid]<x)
{
bs(mid+1,e,x);
}
else
{
bs(s,mid-1,x);
}
//이분 탐색
}
int main()
{
int n,i;
scanf("%d",&n);
for(i=0; i<n; i++)
{
scanf("%d",&a[i]);
d[i]=a[i]; //두 배열의 값 일치시키기(a는 정렬 후 배열,d는 정렬 전 배열)
}
qs(0,n-1);//순서 완성
for(i=0; i<n; i++)
{
printf("%d ",bs(0,n-1,d[i])); //원래 배열에서 정렬 된 배열과 비교하며 숫자를 대입하고(순서) 바로 출력하기
}
return 0;
}