Cod sursa(job #162472)

Utilizator sealTudose Vlad seal Data 20 martie 2008 01:52:34
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<stdio.h>
#define Nm (1<<15)
#define md (l+r>>1)
#define ls (n<<1)
#define rs (n<<1|1)
int A[Nm],B[Nm],Cnt[Nm<<1],n,i;

void read()
{
    int i;

    freopen("schi.in","r",stdin);
    scanf("%d",&n);
    for(i=1;i<=n;++i)
        scanf("%d",A+i);
}

void build(int n, int l, int r)
{
    Cnt[n]=r-l+1;
    if(l<r)
    {
        build(ls,l,md);
        build(rs,md+1,r);
    }
}

void insert(int n, int l, int r, int p)
{
    if(l==r)
        B[l]=i;
    else
        if(Cnt[ls]>=p)
            insert(ls,l,md,p);
        else
            insert(rs,md+1,r,p-Cnt[ls]);
    --Cnt[n];
}

void solve()
{
    build(1,1,n);
    for(i=n;i;--i)
        insert(1,1,n,A[i]);
}

void write()
{
    int i;

    freopen("schi.out","w",stdout);
    for(i=1;i<=n;++i)
        printf("%d\n",B[i]);
}

int main()
{
    read();
    solve();
    write();
    return 0;
}