Cod sursa(job #212231)

Utilizator mircea_infoSuciu Mircea-Gabriel mircea_info Data 4 octombrie 2008 19:20:32
Problema Schi Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>

int arb[30001],n,s[30001],poz,val,sol[30001];

void build(int nod, int st, int dr)
{
    if(st>dr)
        return;
    if(st==dr)
    {
        arb[nod]=1;
        return;
    }
    build(nod<<1,st,(st+dr)/2);
    build((nod<<1)+1,(st+dr)/2+1,dr);
    arb[nod]=arb[nod<<1]+arb[(nod<<1)+1];
}

void rebuild(int nod, int st, int dr)
{
    if(st>dr)
        return;
    if(st==dr)
    {
        arb[nod]=0;
        sol[st]=val;
        return;
    }
    if(poz<=arb[nod<<1])
        rebuild(nod<<1,st,(st+dr)/2);
    else
    {
        poz-=arb[nod<<1];
        rebuild((nod<<1)+1,(st+dr)/2+1,dr);
    }
    arb[nod]=arb[nod<<1]+arb[(nod<<1)+1];
}

int main()
{
    freopen("schi.in","r",stdin);
    freopen("schi.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&s[i]);
    build(1,1,n);
    for(int i=n;i>=1;i--)
    {
        poz=s[i];
        val=i;
        rebuild(1,1,n);
    }
    for(int i=1;i<=n;i++)
        printf("%d\n",sol[i]);
    fclose(stdout);
    return 0;
}