Cod sursa(job #855990)

Utilizator Aida_SilviaStrimbeanu Aida Silvia Aida_Silvia Data 15 ianuarie 2013 21:22:38
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <cstdio>

using namespace std;

int h[3*30073],n,pos,v[30073],s[30073],el;

void update(int nod, int left, int right)
{
    if (left==right)
        {h[nod]=el;
        return;}

    int mid=(left+right)/2;
    if (pos<=mid) update(2*nod,left,mid);
    else update(2*nod+1,mid+1,right);

    h[nod]=h[2*nod]+h[2*nod+1];
}

void query(int nod, int left, int right, int val)
{
    if (left==right)
    {
        pos=left;
        return;
    }

    int mid=(left+right)/2;
    if (val<=h[2*nod]) query(2*nod,left,mid,val);
    else query(2*nod+1,mid+1,right,val-h[2*nod]);
}

int main()
{
    freopen("schi.in","r",stdin);
    freopen("schi.out","w",stdout);
    scanf("%d",&n);

    int i;
    el=1;
    for (i=1;i<=n;i++)
    {
        scanf("%d",&s[i]);
        pos=i;
        update(1,1,n);
    }

    for (i=n;i>=1;i--)
    {
        query(1,1,n,s[i]);

        v[pos]=i;
        el=0;
        update(1,1,n);
    }

    for (i=1;i<=n;i++)
     printf("%d\n",v[i]);
    return 0;
}