Cod sursa(job #177139)

Utilizator mariussMarius Telespan mariuss Data 12 aprilie 2008 13:08:07
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<stdio.h>
#define nmax 30010
int v[3*nmax],val[nmax];
void build(int x, int y, int p)
{
    if(x==y)
    {
        v[p]=1;
        return;
    }
    
    int mij=(x+y)>>1;
    
    build(x,mij,p<<1);
    build(mij+1,y,(p<<1)+1);
    
    v[p]=v[p<<1]+v[(p<<1)+1];
    
}

int query(int x, int y, int p, int a)
{
    if(x==y)
    {   
        v[p]=0;  
        return x;
    }
    int mij=(x+y)>>1,rez=0;
    
    if(a<=v[p<<1]) rez=query(x,mij,p<<1,a);
    else rez=query(mij+1,y,(p<<1)+1,a-v[p<<1]);
    
    
    v[p]=v[p<<1]+v[(p<<1)+1];
    
    return rez;
}

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