Cod sursa(job #52929)

Utilizator alextheroTandrau Alexandru alexthero Data 20 aprilie 2007 12:56:40
Problema Schi Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <stdio.h>

#define nmax 30005
#define valmax 64600

unsigned short int a[nmax],arb[valmax],r[nmax];
int n,i;

void init(int nod,int i,int j) {
	if(i == j) arb[nod] = 1;
	else {
		int mi = (i + j) / 2;
		init(nod * 2,i,mi);
		init(nod * 2 + 1,mi + 1,j);
		arb[nod] = arb[nod * 2] + arb[nod * 2 + 1];
	}
}

int query(int nod,int i,int j,int ax) {
	arb[nod]--;
	if(i == j) return i;
	else {
		int mi = (i + j) / 2;
		if(arb[nod * 2] < ax) return query(nod * 2 + 1,mi + 1,j,ax - arb[nod * 2]);
		else return query(nod * 2,i,mi,ax);
	}
}

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

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

	init(1,1,n);
	
	for(i = n; i >= 1; i--) 
		r[query(1,1,n,a[i])] = i;

	for(i = 1; i <= n; i++) printf("%d\n",r[i]);

	return 0;
}