Cod sursa(job #43032)

Utilizator ionescu_bogdanIonescu Bogdan-Gabriel ionescu_bogdan Data 29 martie 2007 19:06:22
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define nmax 30010
#define amax 120010

int n,a[nmax],i,j,x,b[nmax],st,en,arb[amax];

void fill(const int x,const int st,const int en)
{
	arb[x]=en-st+1;
	if (en>st)
	{
		fill(x*2,st,(st+en)/2);
		fill(x*2+1,(st+en)/2+1,en);
	}
}

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);

	fill(1,1,n);
	for (i=n;i>0;i--)
	{
		x=1,st=1,en=n;
		while (st<en)
		{
			if (a[i]>arb[x*2])
				a[i]-=arb[x*2],x=x*2+1,st=(st+en)/2+1;
			else
				arb[x*2]--,x*=2,en=(st+en)/2;
		}
		b[st]=i;
	}

	for (i=1;i<=n;i++)
		printf("%d\n",b[i]);

	return 0;
}