Cod sursa(job #446121)

Utilizator eudanipEugenie Daniel Posdarascu eudanip Data 25 aprilie 2010 08:29:36
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<stdio.h>

int n,arb[70000],v[30005],f[30005];

void update(int n,int l,int r,int poz,int val)
{
    if(l==r)
    {
        arb[n]=val;
        return ;
    }
    int mij=(l+r)/2;
    if(poz<=mij)
        update(2*n,l,mij,poz,val);
    else
        update(2*n+1,mij+1,r,poz,val);
    arb[n]=arb[2*n]+arb[2*n+1];
}

int query(int n,int l,int r,int poz)
{
    if(l==r)
        return l;
    int mij=(l+r)/2;
    if(poz<=arb[2*n])
        return query(2*n,l,mij,poz);
    else
        return query(2*n+1,mij+1,r,poz-arb[2*n]);
}

int main ()
{
    int i,r;
    freopen("schi.in","r",stdin);
    freopen("schi.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        update(1,1,n,i,1);
    for(i=1;i<=n;i++)
        scanf("%d",&v[i]);
    for(i=n;i>=1;i--)
    {
        r=query(1,1,n,v[i]);
        update(1,1,n,r,0);
        f[r]=i;
    }
    for(i=1;i<=n;i++)
        printf("%d\n",f[i]);
    return 0;
}