Cod sursa(job #133575)

Utilizator floringh06Florin Ghesu floringh06 Data 8 februarie 2008 23:17:56
Problema Schi Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <cstdio>  
#include <cstring>

using namespace std;
  
#define FIN "schi.in"
#define FOUT "schi.out"
#define MAX_N 1 << 16
  
int N; 
int A[MAX_N >> 1];
int C[MAX_N >> 1];
int p[MAX_N >> 1];  
  
    void insert(int p)  
    {  
         for(; p < N + 10; p += ((p - 1) & p) ^ p) ++C[p];  
    }  
  
    int erase(int p)  
    {  
         int r = 0;  
         for(; p > 0; p -= ((p - 1) & p) ^ p) r += C[p];  
         return r;  
    }  
  
    int main()  
    {  
        freopen(FIN, "r", stdin);  
        freopen(FOUT, "w", stdout);  
  
        int i, a, b;  
  
        scanf("%d", &N);  
        for(i = 0; i < N; ++i) scanf("%d", A + i);  
        
        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;  
    }