Cod sursa(job #595230)

Utilizator mathboyDragos-Alin Rotaru mathboy Data 11 iunie 2011 17:41:21
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <cstdio>

#define MAXN 30010

#define mid ((st + dr) >> 1)
#define fs 2 * node
#define fd 2 * node + 1
using namespace std;


int Aint[MAXN * 4];
int VPos[MAXN], VSol[MAXN], resQ, N;

void buildAint(int node, int st, int dr) 
{
	if(st == dr) 
	{
		Aint[node] = 1;
		return ;
	}
	buildAint(fs, st, mid);
	buildAint(fd, mid + 1, dr);

	Aint[node] = Aint[fs] + Aint[fd];
}
void queryAint(int node, int st, int dr, int val)
{	
	Aint[node] -= 1;
	if(st == dr)
	{
		resQ = st;
		return ;
	}
	if(Aint[fs] >= val)
		queryAint(fs, st, mid, val);
	else queryAint(fd, mid + 1, dr, val - Aint[fs]);
}
int main () {

	freopen("schi.in", "r", stdin);
	freopen("schi.out", "w", stdout);

	scanf("%d\n", &N);
	
	int i;

	for(i = 1; i <= N; i++)
		scanf("%d\n", &VPos[i]);

	buildAint(1, 1, N);
	
	for(i = N; i >= 1; i--) {
	//	printf("%d\n", Aint[1]);
		queryAint(1, 1, N, VPos[i]);
		VSol[resQ] = i;
	}
	for(i = 1; i <= N; i++)
		printf("%d\n", VSol[i]);
	return 0;
}