Cod sursa(job #133624)

Utilizator floringh06Florin Ghesu floringh06 Data 9 februarie 2008 11:56:23
Problema Schi Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <stdio.h>  
  
#define FIN "schi.in"
#define FOUT "schi.out"
#define MAX_N 30005
  
int N; 
short A[MAX_N];
short C[MAX_N];
short p[MAX_N];  
  
    inline void insert(int p)  
    {  
         for(; p < N + 1; p += ~(p - 1) & p) ++C[p];  
    }  
  
    inline int erase(int p)  
    {  
         int r = 0;  
         for(; p > 0; p -= ~(p - 1) & p) r += C[p];  return r;  
    }  
  
    int main()  
    {  
        freopen(FIN, "r", stdin);  
        freopen(FOUT, "w", stdout);  
  
        int i, a, b, j;  
  
        scanf("%d\n", &N);  
        char S[7];
        for(i = 0; i < N; ++i)
        {
              gets (S);
              int L = strlen (S);  
              for (j = 0; j < L; ++j)
                  A[i] = A[i]*10 + S[j] - '0';
        }
        int c;
        for(i = N - 1; i >= 0; --i) 
        {  
              a = A[i];  
              for(b = a + erase(a);;) 
              {  
                int best = erase(b) - erase(a);  
                     if(best > 0) 
                     {  
                        a = b; b += best;  
                     } 
                     else break;  
              }  
              p[b] = i + 1;  
              insert(b);  
        }  
  
        for(i = 1; i <= N; ++i)  
              printf("%d\n", p[i]);  
  
        return 0;  
    }