문제
수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.
Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다.
X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자.
입력
첫째 줄에 N이 주어진다.
둘째 줄에는 공백 한 칸으로 구분된 X1, X2, ..., XN이 주어진다.
출력
첫째 줄에 X'1, X'2, ..., X'N을 공백 한 칸으로 구분해서 출력한다.
입력값을 저장하고 정렬해서 인덱스를 매기고 각 숫자가 원래 어디있었는지 기억하기 위해 pair 클래스를 사용해서 값을 출력했다.
int main()
{
int n;
cin >> n;
vector<long> originV(n);
vector<pair<long long, long long>> v;
for (int i = 0;i < n;i++)
{
int value;
cin >> value;
v.push_back({ value, i });
}
sort(v.begin(), v.end());
int rank = 0;
originV[v[0].second] = rank;
for (int i = 1;i < n;i++)
{
if (v[i].first != v[i - 1].first)
rank++;
originV[v[i].second] = rank;
}
for (int i = 0;i < n;i++)
cout << originV[i] << " ";
}