http://codeforces.com/contest/379/problem/C
思路:先排序,然后判断如果rating>ans,ans=rating否则ans++;然后对应的位置输出就可以;
1 #include <cstdio> 2 #include <cstring> 3 #include <map> 4 #include <algorithm> 5 #define LL __int64 6 #define maxn 500010 7 using namespace std; 8 int t; 9 int n; 10 LL a[maxn]; 11 LL b[maxn]; 12 struct node 13 { 14 LL x; 15 LL id; 16 bool operator <(const node &a)const 17 { 18 return x<a.x; 19 } 20 }p[maxn]; 21 22 int main() 23 { 24 scanf("%d",&n); 25 for(int i=0; i<n; i++) 26 { 27 scanf("%I64d",&a[i]); 28 p[i].x=a[i]; 29 p[i].id=i; 30 } 31 sort(p,p+n); 32 int ans; 33 ans=b[p[0].id]=p[0].x; 34 for(int i=1; i<n; i++) 35 { 36 if(p[i].x>ans) 37 { 38 ans=p[i].x; 39 b[p[i].id]=ans; 40 } 41 else 42 { 43 ans++; 44 b[p[i].id]=ans; 45 } 46 } 47 for(int i=0; i<n; i++) 48 { 49 if(i==0) 50 printf("%I64d",b[i]); 51 else 52 printf(" %I64d",b[i]); 53 } 54 printf(" "); 55 return 0; 56 }