Cod sursa(job #856884)

Utilizator razvan9310FMI - Razvan Damachi razvan9310 Data 17 ianuarie 2013 04:01:28
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <cstdio>
#define nmax 30001
using namespace std;

int a[65537], pos[nmax], board[nmax], n, i;

void buildTree(int nod, int stg, int dpt)
{
	if (stg == dpt)
	{
		a[nod] = 1;
		return;
	}
	
	int m=(stg+dpt)>>1, fs=nod<<1;
	int fd = 1+fs;
	buildTree(fs, stg, m);
	buildTree(fd, m+1, dpt);
	
	a[nod] = a[fs] + a[fd];
}

void query(int q, int nod, int stg, int dpt)
{
	if (stg == dpt)
	{
		board[stg] = i;
		a[nod] = 0;
		return;
	}
	
	int m=(stg+dpt)>>1, fs=nod<<1;
	int fd = 1+fs;
	if (q <= a[fs])
		query(q, fs, stg, m);
	else
		query(q-a[fs], fd, m+1, dpt);
	
	--a[nod];
}

int main()
{
	freopen("schi.in", "r", stdin);
	freopen("schi.out", "w", stdout);
	scanf("%d", &n);
	for (i=1; i<=n; ++i)
		scanf("%d", &pos[i]);
	
	buildTree(1, 1, n);
	for (i=n; i>0; --i)
		query(pos[i], 1, 1, n);
	for (i=1; i<=n; ++i)
		printf("%d\n", board[i]);
	
	return 0;
}