Cod sursa(job #219898)

Utilizator alexeiIacob Radu alexei Data 8 noiembrie 2008 18:05:42
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include<stdio.h>
#define NMAX 32768

int A[(NMAX<<1)+(NMAX<<1)],SOL[NMAX],S[NMAX];
int val,fspace;

void init(int nod,int left,int right)
{
     if( left==right )
     {
         A[nod]=1;
         return;
     }
     else
     {
         int mij=(left+right)>>1;
         int aux=nod<<1;
         
         init(aux,left,mij);
         init(aux+1,mij+1,right);
         
         A[nod]=A[aux]+A[aux+1];
     
     }
}

void update(int nod, int left, int right)
{
     if( left==right )
     {
         SOL[ left ]=val;
         A[ nod ]=0;
         return;
     }
     else
     {
         int mij=(left+right)>>1;
         int aux=nod<<1;
         
         if( A[ aux ]>= fspace )
             update( aux, left, mij );
         else
         {
             fspace-=A[aux];
             update( aux+1, mij+1, right );
         }    
         
         A[nod]=A[aux]+A[aux+1];    
     }
}

int main()
{
    freopen("schi.in","r",stdin);
    freopen("schi.out","w",stdout);
    
    int N;
    scanf("%d",&N);
    
    init(1,1,N);
    
    int i;
    for(i=1; i<=N; ++i) scanf("%d\n",&S[i]);
    
    for(i=N; i; --i)
    {
             val=i;
             fspace=S[i];
             update(1,1,N);
    }
    
    for(i=1; i<=N; ++i)
             printf("%d\n",SOL[i]);
    
    return 0;
}