Cod sursa(job #449970)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 7 mai 2010 15:24:06
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <cstdio>

#define file_in "schi.in"
#define file_out "schi.out"

#define Nmax 707001

int n,v[Nmax];
int a[Nmax];
int sol[Nmax];

void build(int nod, int a, int b)
{
	v[nod]=b-a+1;
	
	if (a<b)
	{
		int mij=(a+b)>>1;
		
		build(2*nod,a,mij);
		build(2*nod+1,mij+1,b);
	}
}

void update(int nod, int a, int b, int poz, int val)
{
	v[nod]--;
	if (a==b)
	{
		sol[a]=poz;
	}
	else
	{
		int mij=(a+b)>>1;
		
		if (v[2*nod]>=val)
			update(2*nod,a,mij,poz,val);
		else
			update(2*nod+1,mij+1,b,poz,val-v[2*nod]);
	}
}
	

void citire()
{
	int i;
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d", &n);
	
	for (i=1;i<=n;++i)
	{
		scanf("%d", &a[i]);
	}
}

void solve()
{
	int i;
		build(1,1,n);
        for (i=n;i>=1;--i)
			 update(1,1,n,i,a[i]);
		
		for (i=1;i<=n;++i)
			 printf("%d\n", sol[i]);
}


int main()
{
	citire();
	solve();
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
	
}