Cod sursa(job #48861)

Utilizator pauldbPaul-Dan Baltescu pauldb Data 5 aprilie 2007 09:53:44
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>

#define maxn 30010
#define maxx 65536

int n,l,x,y;
int a[maxn],sol[maxn];
int c[maxx];

void update(int p,int r,int nod)
{
     if (p==r)
     {
         c[nod]=0;
         sol[p]=y;
     }
     else {
              int q=(p+r)/2;
              
              if (x<=c[nod*2]) update(p,q,nod*2);
              else {
                       x-=c[nod*2];            
                       update(q+1,r,nod*2+1);
                   }
              
              c[nod]=c[nod*2]+c[nod*2+1];
          }
}

int main()
{
    freopen("schi.in","r",stdin);
    freopen("schi.out","w",stdout);
    
    scanf("%d ",&n);
    int i;
    
    for (i=1;i<=n;i++) scanf("%d ",&a[i]);
    
    for (l=1;l<n;l<<=1);
    
    for (i=l;i<n+l;i++) c[i]=1;
    
    for (i=l-1;i>0;i--) c[i]=c[i*2]+c[i*2+1];
        
    for (i=n;i>0;i--)
    {
        x=a[i];
        y=i;
        update(1,l,1);
    }
    
    for (i=1;i<=n;i++) printf("%d\n",sol[i]);
    
    return 0;
}