Cod sursa(job #473267)

Utilizator Bogdan_tmmTirca Bogdan Bogdan_tmm Data 28 iulie 2010 15:15:34
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<algorithm>
using namespace std;
#define N_MAX 30005

int rez[N_MAX],a[N_MAX],arb[N_MAX*4+100];
int i,n;

void update(int nod,int st,int dr,int poz,int val)
{
	if(st==dr)
	{
		arb[nod]=val;
		return ;
	}
	int md=(st+dr)>>1;

	if(poz<=md)
		update((nod<<1),st,md,poz,val);
	else
		update((nod<<1)+1,md+1,dr,poz,val);

	arb[nod]=arb[(nod<<1)]+arb[(nod<<1)+1];
}

int query(int nod,int st,int dr,int val)
{
	if(st==dr)
	{
		return dr;
	}

	int md=(st+dr)>>1;
	
	if(val<=arb[(nod<<1)])
		return query((nod<<1),st,md,val);
	else
		return query((nod<<1)+1,md+1,dr,val-arb[(nod<<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]);
		update(1,1,n,i,1);
	}

	for(i=n;i;i--)
	{
		int x=query(1,1,n,a[i]);
		update(1,1,n,x,0);
		rez[x]=i;
	}
	
	for(i=1;i<=n;i++)
		printf("%d\n",rez[i]);

	return 0;
}