Cod sursa(job #1110144)

Utilizator TodeaDariustodea darius TodeaDarius Data 17 februarie 2014 20:57:53
Problema Schi Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 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)
    {
        cant--;
        if(cant==0)
           {
               loc[st]=i;
               arb[p]--;
           }
    }
    else
    {
        if(cant!=0 && arb[2*p]!=0)
            query(2*p,st,mij);
        if(cant!=0 && arb[2*p+1]!=0)
            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;
}