Cod sursa(job #213426)

Utilizator EdeNNu Cred EdeN Data 9 octombrie 2008 19:50:13
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <stdio.h>

using namespace std;

int n,a[130000],b[30000],sol[30000],i,place;

void scanit()
{
    freopen("schi.in","r",stdin);
    scanf("%d",&n);
    for (int i=1; i<=n; i++)
      scanf("%d",&b[i]);
    fclose(stdin);
}

void build(int nod, int st, int dr)
{
    if (st==dr)
        {
            a[nod]=1;
            return;
        }
    int mij=(st+dr) >> 1;
    build(nod << 1, st, mij);
    build((nod << 1)+1, mij+1, dr);
    a[nod]=a[nod << 1] + a[(nod << 1)+1];
}

void make(int nod, int st, int dr)
{
    if (st==dr)
        {
            a[nod]=0;
            sol[st]=i;
            return;
        }
    int mij=(st+dr) >> 1;
    if (place<=a[nod << 1])
        make(nod << 1, st, mij);
    else
        {
            place=place-a[nod << 1];
            make((nod <<1)+1, mij+1, dr);
        }
    a[nod]=a[nod << 1]+a[(nod << 1)+1];
}

void final()
{
    freopen("schi.out", "w", stdout);
    for (i=1; i<=n; i++)
        printf("%d" "\n", sol[i]);
}

int main()
{
    scanit();
    build(1,1,n);
    for (i=n; i>=1; i--)
        {
            place=b[i];
            make(1,1,n);
        }
    final();
    return 0;
}