priority_queueやsortを使い、大きいほうから順に並べてその得点の順位を決めます。

計算量はO(n log n)だけどこの問題はそこまで計算量気にしなくてよさそう。

#include <bits/stdc++.h>

using namespace std;

int d[100005];
int jun[120];

int main(){

	priority_queue<int> que;
	int n;
	scanf("%d",&n);
	for(int i = 0;i < n;i++){
		scanf("%d",&d[i]);
		que.push(d[i]);
	}
	int pre=101;
	for(int i = 1;i <= n;i++){
		int nau = que.top(); que.pop();
		if(pre > nau){
			jun[nau] = i;
			pre = nau;
		}
	}
	for(int i = 0;i < n;i++){
		printf("%d
",jun[d[i]]);
	}
	return 0;
}