Cod sursa(job #133578)

Utilizator floringh06Florin Ghesu floringh06 Data 8 februarie 2008 23:23:21
Problema Schi Scor 95
Compilator c Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <stdio.h>  
  
#define FIN "schi.in"
#define FOUT "schi.out"
#define MAX_N 1 << 16
  
int N; 
short A[MAX_N >> 1];
short C[MAX_N >> 1];
short p[MAX_N >> 1];  
  
    void insert(int p)  
    {  
         for(; p < N + 10; p += ~(p - 1) & p) ++C[p];  
    }  
  
    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);  
              for (j = 0; j < strlen (S); ++j)
                  A[i] = A[i]*10 + S[j] - '0';
        }
        
        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;  
    }