Cod sursa(job #432577)

Utilizator vladbBogolin Vlad vladb Data 2 aprilie 2010 15:43:45
Problema Schi Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include<fstream>

using namespace std;

ifstream fin("schi.in");
ofstream fout("schi.out");

int n;
int a[30000],poz[30001],b[30001];

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

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

int main()
{	int i;
	fin>>n;
	constr(1,n,1);
	for(i=1;i<=n;i++)
		fin>>poz[i];
	for(i=n;i>=1;i--)
		b[cauta(1,n,1,poz[i])]=i;
	for(i=1;i<=n;i++)
		fout<<b[i]<<"\n";
	fin.close();
	fout.close();
	return 0;
}