Cod sursa(job #356010)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 12 octombrie 2009 23:26:58
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>
#define N 1<<15
#define M 1<<16
short int n,v[N],arb[M],poz[N];
void read()
{
	scanf("%hd",&n);
	int i;
	for (i=1; i<=n; i++)
		scanf("%hd",&v[i]);
}
void cstr(int nod,int st,int dr)
{
	arb[nod]=dr-st+1;
	if (st==dr)
		return;
	int mij=(st+dr)/2;
	cstr(2*nod,st,mij);
	cstr(2*nod+1,mij+1,dr);
}
void update(int nod,int st,int dr,int pozitie,int loc)
{
	arb[nod]--;
	if (st==dr)
	{
		poz[st]=pozitie;
		return;
	}
	int mij=(st+dr)/2;
	if (arb[2*nod]>=loc)
		update(2*nod,st,mij,pozitie,loc);
	else
	{
		loc-=arb[2*nod];
		update(2*nod+1,mij+1,dr,pozitie,loc);
	}
}
int main()
{
	freopen("schi.in","r",stdin);
	freopen("schi.out","w",stdout);
	read();
	cstr(1,1,n);
	int i;
	for (i=n; i>=1; i--)
		update(1,1,n,i,v[i]);
	for (i=1; i<=n; i++)
		printf("%hd\n",poz[i]);
	return 0;
}