输出每个数的排名
/*书籍《CCF 中学生计算机程序设计》 江涛 等
5
8 2 6 9 4
*/
#include<iostream>
#include<algorithm>
using namespace std;
struct tNode{
int data,//数值
rank,//排名
index;//下标
};
int N;
tNode a[10001];
//自定义规则排序
bool cmpdata(tNode x,tNode y)
{
return x.data<y.data;
}
bool cmpindex(tNode x,tNode y)
{
return x.index<y.index;
}
int main()
{
cin>>N;
//输入数据并记下下标
//值: 8 2 6 9 4
//下标:0 1 2 3 4
for(int i=0;i<N;i++)
{
cin>>a[i].data;
a[i].index=i;
}
//根据值排序,并记下排名
// 值: 2 4 6 8 9
//排名:1 2 3 4 5
sort(a,a+N,cmpdata);
for(int i=0;i<N;i++)
{
a[i].rank=i+1;
}
//根据下标排序,输出结果
//0 1 2 3 4对应 8 2 6 9 4输出排名4 1 3 5 2
sort(a,a+N,cmpindex);
for(int i=0;i<N;i++)
{
cout<<a[i].rank<<" ";
}
cout<<endl;
}