Cod sursa(job #1022646)

Utilizator thewildnathNathan Wildenberg thewildnath Data 5 noiembrie 2013 20:22:46
Problema Schi Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>

int n,val,poz;
int a[120002],sol[30002],v[30002];

inline void update(int l,int r,int x)
{
    v[x]=r-l+1;
    if(l>=r)
        return;
    int med=(l+r)/2;
    update(l,med,2*x);
    update(med+1,r,2*x+1);
}

inline void query(int l,int r,int x)
{
    if(l==r)
    {
        poz=l;
        v[x]=0;
        return;
    }
    int med=(l+r)/2;
    if(v[2*x]<val)
    {
        val-=v[2*x];
        query(med+1,r,2*x+1);
    }
    else
        query(l,med,2*x);
    --v[x];
}

int main()
{
    freopen("schi.in","r",stdin);
    freopen("schi.out","w",stdout);
    int i;
    scanf("%d",&n);

    update(1,n,1);

    for(i=1;i<=n;++i)
        scanf("%d",&a[i]);

    for(i=n;i>=1;--i)
    {
        val=a[i];
        query(1,n,1);
        sol[poz]=i;
    }

    for(i=1;i<=n;++i)
        printf("%d\n",sol[i]);

    return 0;
}