http://ac.jobdu.com/problem.php?pid=1167
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
struct E
{
int no;
int data;
int order;
}buf[10005];
bool cmp1(E A,E B)
{
return A.no<B.no;
}
bool cmp2(E A,E B)
{
return A.data<B.data;
}
int main()
{
int n,i;
while (scanf("%d",&n)!=EOF)
{
memset(buf,0,sizeof(buf));
for (i=0;i<n;i++)
{
scanf("%d",&buf[i].data);
buf[i].no=i;
}
sort(buf,buf+n,cmp2);
for (i=0;i<n;i++)
{
if (i==0) //與一般排名方式不太一樣
{ //1 1 2 3,而非 1 1 3 4
buf[i].order=1;
}
else if (i>0&&buf[i].data==buf[i-1].data)
{
buf[i].order=buf[i-1].order;
}
else
buf[i].order=buf[i-1].order+1;
}
sort(buf,buf+n,cmp1);
for (i=0;i<n;i++)
{
if (i==0)
{
printf("%d",buf[i].order);
}
else
printf(" %d",buf[i].order);
}
printf("\n");
}
return 0;
}