Cod sursa(job #768824)

Utilizator starduststardust stardust Data 17 iulie 2012 19:32:47
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<fstream>
#define maxn 30005

using namespace std;

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

int arb[maxn*4+65],sol[maxn],a[maxn];
int n,val,poz,rez;

void update(int nod,int left,int right)
{
   if(left==right)
   {	   
	   arb[nod]=val;
	   return;
   }
   int mid=(left+right)/2;
   if(poz<=mid) update(2*nod,left,mid);
   else update(2*nod+1,mid+1,right);
   arb[nod]=arb[2*nod]+arb[2*nod+1];
}

void query(int nod,int left,int right)
{
	if(left==right)
	{
		rez=left;
		return;
	}
	int mid=(left+right)/2;
	if(val<=arb[2*nod]) query(2*nod,left,mid);
	else 
	{
		val-=arb[2*nod];
		query(2*nod+1,mid+1,right);
	}
}
	

void read()
{
	in>>n;
	for(int i=1;i<=n;i++)
	{
		in>>a[i];
		poz=i;
		val=1;
		update(1,1,n);
	}
}

int main()
{
	read();
	for(int i=n;i>=1;i--)
	{
		val=a[i];
		query(1,1,n);
		sol[rez]=i;
		poz=rez,val=0;
		update(1,1,n);
	}
	for(int i=1;i<=n;i++)
		out<<sol[i]<<"\n";
}