Cod sursa(job #1110816)

Utilizator TodeaDariustodea darius TodeaDarius Data 18 februarie 2014 13:34:38
Problema Schi Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<cstdio>
using namespace std;
#define big 30005
int n,v[big],arb[2*big],cant,i,loc[big];
void construct(int p,int st,int dr)
{
    int mij;
    mij=(st+dr)/2;
    if(st==dr)
        arb[p]=1;
    else
    {
        construct(2*p,st,mij);
        construct(2*p+1,mij+1,dr);
        arb[p]=arb[2*p]+arb[2*p+1];
    }
}
void query(int p,int st,int dr)
{
    int mij;
    mij=(st+dr)/2;
    if(st==dr)
    {
        loc[st]=i;
        arb[p]--;
    }
    else
    {
        if(arb[2*p]>=cant)
            query(2*p,st,mij);
        else
            {
                cant=cant-arb[2*p];
                    query(2*p+1,mij+1,dr);

            }
            arb[p]=arb[2*p]+arb[2*p+1];
    }
}
int main()
{
    freopen("schi.in","r",stdin);
    freopen("schi.out","w",stdout);

    scanf("%d",&n);
    for( i=1;i<=n;i++)
       {
           scanf("%d",&v[i]);
       }
    construct(1,1,n);
    for( i=n;i>=1;i--)
    {
        cant=v[i];
        query(1,1,n);
    }
    for(i=1;i<=n;i++)
        printf("%d\n",loc[i]);
    return 0;
}