Cod sursa(job #725164)

Utilizator matei_cChristescu Matei matei_c Data 26 martie 2012 20:07:45
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<cstdio>
#include<cmath>

const int MAX_N = 30001 ;
const int MAX_NR = 201 ;

int n;
int v[MAX_N];
int loc[MAX_N];
int nr[MAX_NR];
int ocupat[MAX_N];

int indice(int x,int ni,int len)
{
	int unu = x ;
	int ind = 0,rez;
	
	while( unu > nr[ind] )
		unu -= nr[ind++] ;

	for(int i=len *(ind-1) + 1;i<=n;++i)
	{
		if(ocupat[i]==1)
			--unu;
		if(unu == 0)
		{	
			rez = i ;
			break;
		}	
	}
	--nr[ind];
	return rez;
}

int main()
{
	
	freopen("schi.in","r",stdin);
	freopen("schi.out","w",stdout);
	
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
		scanf("%d",&v[i]);
	
	int rad = (int)sqrt(n), start;
	for(int i=1;i<=n;++i) {
		ocupat[i] = 1 ;
		nr[ (i - 1)/ rad + 1]++;
		start = (i-1)/rad + 1;
	}
	
	
	for(int i=n;i>=1;--i)
	{
		int ind = indice(v[i],start,rad);
		loc[ind] = i ;
		ocupat[ind] = 0 ;
	}	
	
	for(int i=1;i<=n;++i)
		printf("%d\n",loc[i]);
	
	return 0;
	
}