Cod sursa(job #89496)

Utilizator devilkindSavin Tiberiu devilkind Data 7 octombrie 2007 00:11:43
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <stdio.h>
#define NMAX 40000

long int arb[NMAX*3];
long int n,i,j,k,a[NMAX],cls[NMAX];


void build(long int nod, long int st, long int dr)
{
if (st==dr) arb[nod]=1;
        else
           {
           long int mid;
           mid=(st+dr)/2;

           build(nod*2,st,mid);
           build(nod*2+1,mid+1,dr);

           arb[nod]=dr-st+1;
           }
}

int query(long int nod, long int st, long int dr, long int val)
{
if (st==dr) {arb[nod]--;return st;}
                else
                   {
                   long int mid=(st+dr)/2;
                   arb[nod]--;
                   if (val<=arb[2*nod]) return query(nod*2,st,mid,val);
                        else return query(nod*2+1,mid+1,dr,val-arb[2*nod]);
                   }
}


int main()
{
        freopen("schi.in","r",stdin);
        freopen("schi.out","w",stdout);

        scanf("%ld",&n);
        for (i=1;i<=n;i++)
                scanf("%ld",&a[i]);
        build(1,1,n);
        for (i=n;i;i--)
                {
                k=query(1,1,n,a[i]);
                cls[k]=i;
                }

        for (i=1;i<=n;i++) printf("%ld\n",cls[i]);
return 0;
}