Cod sursa(job #143486)

Utilizator raduzerRadu Zernoveanu raduzer Data 26 februarie 2008 16:32:03
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <stdio.h>

int n,a[32000],b[70000],p,vp,rez[32000],val,i;

void proc(int x)
{
	if (x>=vp)
	{
		val-=b[x];
		rez[x-vp+1]=i;
		b[x]=0;
		return;
	}
	if (b[x*2]<val)
	{
		val-=b[x*2];
		proc(x*2+1);
	}
	else proc(x*2);
	b[x]=b[x*2]+b[x*2+1];
}

int main()
{
	freopen("schi.in","r",stdin);
	freopen("schi.out","w",stdout);
	scanf("%d",&n);
	for (i=1; i<=n; ++i) scanf("%d",&a[i]);
	p=0;
	while (1<<p<n) vp=1<<(++p);
	for (i=vp; i<vp+n; ++i) b[i]=1;
	for (i=p-1; i>=0; --i) 
		for (int j=1<<i; j<1<<(i+1); ++j) b[j]=b[j*2]+b[j*2+1];
	for (i=n; i>0; --i) {val=a[i];proc(1);}
	for (i=1; i<=n; ++i) printf("%d\n",rez[i]);
	return 0;
}