Cod sursa(job #243346)

Utilizator ConsstantinTabacu Raul Consstantin Data 12 ianuarie 2009 19:13:56
Problema Schi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>
int a[300001],sol[30001],x[30001*4],i,j,k,l,m,n;
void init(int r,int st,int dr,int poz,int nr)
{int mij=(st+dr)>>1;
if(st==dr)
        {x[r]=nr;
        return ;}
else
        if(poz<=mij)init(r<<1,st,mij,poz,nr);
        else
        init((r<<1)+1,mij+1,dr,poz,nr);
x[r]=x[r<<1]+x[(r<<1)+1];
}
int caut(int r,int st,int dr,int val)
{int mij=(st+dr)>>1;
if(st==dr)
        return st;
else
if(val<=x[r<<1])caut(r<<1,st,mij,val);
else
caut((r<<1)+1,mij+1,dr,val-x[r<<1]);}
int main(){
FILE *f=fopen("schi.in","r");
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
        fscanf(f,"%d",&a[i]);
for(i=1;i<=n;i++)
        init(1,1,n,i,1);
for(i=n;i>=1;i--)
        {k=caut(1,1,n,a[i]);
        sol[k]=i;
        init(1,1,n,k,0);
        }
FILE *g=fopen("schi.out","w");
for (i=1;i<=n;i++)
        fprintf(g,"%d\n",sol[i]);
fclose(f);
fclose(g);
return 0;}