Cod sursa(job #230465)

Utilizator andrei-alphaAndrei-Bogdan Antonescu andrei-alpha Data 13 decembrie 2008 23:54:50
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <cstdio>
#include <algorithm> 
#define IN "schi.in"
#define OUT "schi.out"
#define left (nod << 1)
#define bit(x) ((x)&(x-1))^(x)
#define II inline
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define N_MAX 1<<15

int S[N_MAX],A[1<<16],V[N_MAX];
int N;

II void scan()
{
	freopen(IN, "r",stdin);
	freopen(OUT, "w",stdout);
	scanf("%d\n", &N);
	FOR(i,1,N)
		scanf("%d", &V[i]);
}

II void update(int x)
{
	for(int i=x;i<=N;i += bit(i) )
		++A[i];
}	

II int querry(int x)
{  
	int sum(x);
	for(int i=--x;i>=1;i -= bit(i) )
		sum -= A[i];
	return sum;
}

void solve()
{
	int Step,step,m;
	for(Step = 1;Step < N;Step <<= 1);
	
	for(int i=N;i>=1;--i)
	{
		for(m = 1,step = Step;step;step >>= 1)  
            if(m + step <= N && querry(m + step) <= V[i]) 
				m += step;  
    	S[m] = i;  
        update(m);  
	}
	FOR(i,1,N)
		printf("%d\n",S[i]);
}

int main()
{
	scan();
	solve();
	return 0;
}