Cod sursa(job #856868)

Utilizator aladinaladin aladinn aladin Data 17 ianuarie 2013 00:34:57
Problema Schi Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <cstdio>
#define lsb(x) x&(-x)
int v[30009],aib[30009],n;

void update(int poz)
{
	for (;poz<=n;poz+=lsb(poz))
		++aib[poz];
}

int getaib(int poz)
{
	int rez=0;
	for (;poz>0;poz-=lsb(poz))
		rez+=aib[poz];
	return rez;
}	

int getpoz(int poz)
{
	int i,step;
	for (i=0,step=1<<16;step;step>>=1)
		if ((i+step<=n) && (i+step-getaib(i+step)<poz))
			i+=step;
	return i+1;
}	

int main()
{
	int i,j,v2[30009];
	
	freopen("schi.in","r",stdin);
	freopen("schi.out","w",stdout);
	
	scanf("%d",&n);
	for (i=1;i<=n;++i) scanf("%d",&v2[i]);
	
	for (i=n;i>0;--i)
	{
		j=getpoz(v2[i]);
		//while (v[j]) ++j;
		v[j]=i;
		update(j);
	}
for (i=1;i<=n;++i)
printf("%d\n",v[i]);
return 0;
}