らての精進日記

修行をします

joi春合宿2007 day1-1:Score

解法

ソートする。
1番目にいる人は、1位。
i(>=2)番目にいる人は、
i-1番目の人と得点が同じならば、i-1番目の人と同じ順位
i-1番目の人と得点が違うならば、i位
とする。

コード

#include<bits/stdc++.h>
using namespace std;

typedef pair<int,int>P;
int r[100000];
int main(){
    int N;
    vector<P>V;
    cin>>N;
    for(int i=0;i<N;i++){
        int a;
        cin>>a;
        V.push_back(P(-a,i));
    }

    sort(V.begin(),V.end());
    int cur=1;
    r[V[0].second]=1;

    for(int i=1;i<N;i++){
        if(V[i-1].first!=V[i].first)cur=i+1;
        r[V[i].second]=cur;
    }

    for(int i=0;i<N;i++)cout<<r[i]<<endl;
}