Cod sursa(job #36199)

Utilizator IgnitionMihai Moraru Ignition Data 23 martie 2007 10:20:08
Problema Schi Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <stdio.h>

#define MN (32768)

int N, n[MN], aib_data[MN], poz[MN];

void set(int p)
{
	for(; p < N+5; p += ~(p-1)&p)
		++aib_data[p];
}

int get(int p)
{
	int r = 0;
	for(; p > 0; p -= ~(p-1)&p)
		r += aib_data[p];
	return r;
}

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

	int i, op, np;

	scanf("%d", &N);
	for(i = 0; i < N; ++i)
		scanf("%d", &n[i]);
	for(i = N-1; i >= 0; --i) {
		//scanf("%d", &op);
		op = n[i];
		for(np = op+get(op); ; ) {
			int diff = get(np)-get(op);
			if(diff > 0) {
				op = np;
				np += diff;
			} else break;
		}
		poz[np] = i+1;
		set(np);
	}

	for(i = 0; i <= N; ++i)
		printf("%d ", poz[i]);
	printf("\n");

	return 0;
}