Cod sursa(job #1233007)

Utilizator laszloasandorLaszlo Sandor laszloasandor Data 24 septembrie 2014 14:26:57
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>

#define nmax 30010
#define amax 120010
#define fr(i,a,b) for(int i=a;i<b;++i)
#define rf(i,a,b) for(int i=a;i>b;--i)

int n,a[nmax],x,er[nmax],st,en,fa[amax];

void epit(const int x,const int st,const int en)
{
    fa[x]=en-st+1;
    if (en>st)
    {
        epit(x*2,st,(st+en)/2);
        epit(x*2+1,(st+en)/2+1,en);
    }
}

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

    scanf("%d",&n);
    fr(i,0,n) scanf("%d",a+i);

    epit(1,1,n);
    rf(i,n-1,-1)
    {
        x=1,st=1,en=n;
        while (st<en)
        {
            if (a[i]>fa[x*2])
                a[i]-=fa[x*2],x=x*2+1,st=(st+en)/2+1;
            else
                fa[x*2]--,x*=2,en=(st+en)/2;
        }
        er[st]=i+1;
    }

    fr(i,1,n+1) printf("%d\n",er[i]);
    return 0;
}