Cod sursa(job #213245)

Utilizator brokensocialiconGrigoriu Cristian-Andrei brokensocialicon Data 8 octombrie 2008 23:01:45
Problema Schi Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>

using namespace std;

int n,a[30010],b[30010],s[4*30010],i,loc;

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

void init(int nod, int st, int dr)
{
    if (st==dr)
    {
        a[nod]=1;
        return;
    }

    int mij=(st+dr) >> 1;

    init(nod << 1, st, mij);
    init((nod << 1)+1, mij+1, dr);

    a[nod]=a[nod << 1]+a[(nod << 1)+1];
}

void parc(int nod, int st, int dr)
{
    if (st==dr)
    {
        a[nod]=0;
        s[st]=i;
        return;
    }

    int mij=(st+dr) >> 1;

    if (loc<=a[nod << 1])
        parc(nod << 1, st, mij);
    else
    {
        loc-=a[nod << 1];
        parc((nod << 1)+1, mij+1,dr);
    }

    a[nod]=a[nod << 1]+a[(nod << 1)+1];
}


int main()
{
    citire();
    init(1,1,n);

    for (i=n;i>=1;i--)
    {
        loc=b[i];
        parc(1,1,n);
    }

    freopen("schi.out","w",stdout);
    for (i=1;i<=n;i++)
     cout << s[i] << "\n";
    fclose(stdout);
}