Cod sursa(job #702091)

Utilizator Eugen01Vasilescu Eugen Eugen01 Data 1 martie 2012 19:29:52
Problema Schi Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<stdio.h>
#define Nmax 30009

int poz,i,n,a[Nmax],AI[2*Nmax],sol[Nmax];

void update(int nod,int st,int dr,int poz,int val)
{
	int m=(st+dr)/2;
	
	if (st==dr)
	{
		AI[nod]=val;
		return;
	}
	
	if (m>=poz) update(nod<<1,st,m,poz,val);
		else update((nod<<1)+1,m+1,dr,poz,val);
	AI[nod]=AI[nod<<1]+AI[(nod<<1)+1];
}

int query(int nod,int st,int dr,int val)
{
	int m=(st+dr)/2;
	
	if (st==dr) return st;
	
	if (AI[nod<<1]>=val) return query(nod<<1,st,m,val);
		else return query((nod<<1)+1,m+1,dr,val-AI[nod<<1]);
}

int main()
{
	freopen("schi.in","r",stdin);
	freopen("schi.out","w",stdout);
	
	scanf("%d",&n);
	for (i=1;i<=n;i++)
	{
		update(1,1,n,i,1);
		scanf("%d",&a[i]);
	}
	
	for (i=n;i>=1;i--)
	{
		poz=query(1,1,n,a[i]);
		sol[poz]=i;
		update(1,1,n,poz,0);
	}
	for (i=1;i<=n;i++)
		printf("%d\n",sol[i]);
}