Cod sursa(job #855014)

Utilizator chimistuFMI Stirb Andrei chimistu Data 14 ianuarie 2013 15:56:29
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<cstdio>
#include<cstdlib>
#define maxn 30000

FILE*f=fopen("schi.in","r");
FILE*g=fopen("schi.out","w");

int A[5*maxn],n,val,pos;

void update(int nod,int st,int dr)
{
     int mij;
     if (st==dr)
     {
        A[nod]=val;
        return;
        }
     mij=(st+dr)/2;
     if (pos<=mij)
        update(2*nod,st,mij);
     else
        update(2*nod+1,mij+1,dr);
     A[nod]=A[2*nod]+A[2*nod+1];
}

void query(int nod,int st,int dr,int val1)
{
     int mij;
     if (st==dr)
     {
        pos=st;
        return;
        }
     mij=(st+dr)/2;
     if (A[2*nod]>=val1)
        query(2*nod,st,mij,val1);
     else
         query(2*nod+1,mij+1,dr,val1-A[2*nod]);
}
     
     

int main()
{
    int sol[maxn],i,v[maxn];
    fscanf(f,"%d",&n);
    val=1;
    for (i=1;i<=n;i++)
    {
        fscanf (f,"%d",&v[i]);
        pos=i;
        update(1,1,n);
        }
    val=0;
    for (i=n;i>=1;i--)
    {
        query(1,1,n,v[i]);
        sol[pos]=i;
        update(1,1,n);
        }
    for (i=1;i<=n;i++)
        fprintf(g,"%d\n",sol[i]);
    return 0;
}