Cod sursa(job #355860)

Utilizator Bit_MasterAlexandru-Iancu Caragicu Bit_Master Data 12 octombrie 2009 13:27:47
Problema Schi Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <cstdio>
#define ARB 40000
#define N 30001

int arb[ARB];

void construire(int st, int dr, int poz)
{
	arb [poz] = dr - st + 1;
	if (st == dr)
		return;
	int mij = (st + dr)/2;
	construire(st,mij, 2*poz);
	construire(mij+1,dr, 2*poz+1);
}

int interogare(int st, int dr, int poz, int val)
{
	arb [poz] -= 1;
	if (st == dr)
		return st;
	int mij = (st+dr)/2;
	if (arb [2*poz] >= val)
		return interogare(st,mij,2*poz,val);
	val -= arb [2*poz];
	return interogare(mij+1,dr,2*poz+1,val);
}

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