Mai intai trebuie sa te autentifici.
Cod sursa(job #243345)
Utilizator | Data | 12 ianuarie 2009 19:11:45 | |
---|---|---|---|
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[120001],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;}