Cod sursa(job #1366650)

Utilizator delia_99Delia Draghici delia_99 Data 1 martie 2015 12:34:07
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
#define NMAX 30010
using namespace std;
int v[NMAX],sol[NMAX],n,i,A[3*NMAX],pos,Anod;

void Abuild(int nod,int st,int dr)
{
    int mij;
    A[nod]=dr-st+1;
    if(st==dr)
        return;
    mij=st+(dr-st)/2;
    Abuild(2*nod,st,mij);
    Abuild(2*nod+1,mij+1,dr);
}

void Afind(int nod,int sum,int st,int dr)
{
    int mij;
    if(st==dr)
    {
        pos=st;
        Anod=nod;
        return;
    }
    mij=st+(dr-st)/2;
    if(sum<=A[2*nod])  Afind(2*nod,sum,st,mij);
    else Afind(2*nod+1,sum-A[2*nod],mij+1,dr);
}

void Aclear(int nod)
{
    --A[nod];
    if(nod==1)
        return;
    Aclear(nod/2);
}

int main()
{
    freopen("schi.in","r",stdin);
    freopen("schi.out","w",stdout);
    scanf("%d\n",&n);
    for(i=1; i<=n; ++i)
        scanf("%d\n",&v[++v[0]]);
    Abuild(1,1,n);
    for(i=n; i>=1; --i)
    {
        Afind(1,v[i],1,n);
        sol[pos]=i;
        Aclear(Anod);
    }
    for(i=1; i<=n; ++i)
        printf("%d\n",sol[i]);
    return 0;
}