Cod sursa(job #338463)

Utilizator rumburakrumburak rumburak Data 5 august 2009 20:11:56
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<cstdio>

const int N = (1<<15);

int v[N],poz[N],n,t[N<<2];

void citire()
{
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
		scanf("%d",&v[i]);
}

int query(int p,int st,int dr,int x)
{
	--t[p];
	if(st==dr)
		return st;
	int mid=(st+dr)>>1;
	if(x<=t[p<<1])
		return query(p<<1,st,mid,x);
	else
		return query((p<<1)+1,mid+1,dr,x-t[p<<1]);
}

void init(int p,int st,int dr)
{
	if(st==dr)
	{
		++t[p];
		return;
	}
	int mid=(st+dr)>>1;
	init(p<<1,st,mid);
	init((p<<1)+1,mid+1,dr);
	t[p]=t[p<<1]+t[(p<<1)+1];
}

void calcul()
{
	int i,q;
	init(1,1,n);
	for(i=n;i;--i)
	{
		q=query(1,1,n,v[i]);
		poz[q]=i;
	}
}

void scrie()
{
	for(int i=1;i<=n;++i)
		printf("%d\n",poz[i]);
}

int main()
{
	freopen("schi.in","r",stdin);
	freopen("schi.out","w",stdout);
	citire();
	calcul();
	scrie();
	return 0;
}