Cod sursa(job #320835)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 5 iunie 2009 22:42:03
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
# include <cstdio>

# define FIN "schi.in"
# define FOUT "schi.out"
# define MAX_N 1 << 16
# define MAX_M 1 << 15

int N, i;
int V[MAX_M];
int A[MAX_N];
int L[MAX_M];

    void Update(int N, int St, int Dr, int Ind, int Loc)
    {
        if (St == Dr)
        {
            ++A[N];
            L[St] = Ind;
            
            return;
        }
        
        int Mij = (St + Dr) >> 1;
        
        if (Loc <= Mij - St + 1 - A[N << 1]) Update(N << 1, St, Mij, Ind, Loc);
        else Update(N << 1 | 1, Mij + 1, Dr, Ind, Loc - Mij + St - 1 + A[N << 1]);
        
        A[N] = A[N << 1] + A[N << 1 | 1];
    }

    int main()
    {
        freopen(FIN, "r", stdin);
        freopen(FOUT, "w", stdout);
        
        scanf("%d", &N);
        
        for (i = 1; i <= N; ++i) scanf("%d", &V[i]);
        
        for (i = N; i >= 1; --i) Update(1, 1, N, i, V[i]);
        
        for (i = 1; i <= N; ++i) printf("%d\n", L[i]);
        
        return 0;
    }