排名
问题描述
有一个n个人的班级。
你知道每个人的成绩,需要输出每个人的排名。
输入
第一行一个整数n。(1≤n≤10^5)
第二行n个数,表示每个人的成绩c。(1≤c≤10^9)
输出
输出n个数,表示每个人的排名
输入例子 1
6 3 5 4 2 5 3
输出例子 1
4 1 3 6 1 4
提示:
比较经典的对分数离散化。
但是离散化一般是从小到大的,所以一开始先全取负。
将分数排序,然后原序列再逐个在排序后的数组上二分。
推荐写c++,直接用stl的lower_bound即可。
答案:
#include<bits/stdc++.h> using namespace std; signed main(){ ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); int n;cin>>n; vector<int> a(n); for (int i=0;i<n;++i){ cin>>a[i]; a[i]=-a[i]; } auto b=a; sort(b.begin(),b.end()); for (int i=0;i<n;++i) cout<<lower_bound(b.begin(),b.end(),a[i])-b.begin()+1<<' '; return 0-0; }
标签:周赛,OJ,输出,int,第二场,排名,10 From: https://www.cnblogs.com/hihopkc/p/16866147.html