Cod sursa(job #409764)

Utilizator caftacnscmMiron Catalina-Iustina caftacnscm Data 3 martie 2010 20:59:35
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<stdio.h> 
int a[180010],c[30010],h[30010],n; 

void update(int i, int j, int p, int nod, int v) 
{ 	if(i==j && j==p) 
	{ 	a[nod]=v;
		return;
	}
	
	int m=(i+j)/2; 
	if(p<=m)
		update(i,m,p,nod*2,v); 
	else
		update(m+1,j,p,nod*2+1,v); 
	
	a[nod]=a[nod*2]+a[nod*2+1]; 

}

void read() 
{  	scanf("%d", &n); 
	for(int i=1; i<=n;i++)        
	{	scanf("%d", &h[i]); 
		update(1,n,i,1,1); 
	}
}


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

void solve()
{	int i; 
   
	for(i=n; i>=1; --i) 
	{ 	int boo=query(1,n,1,h[i]); 
		c[boo]=i; 
		update(1,n,boo,1,0); 
	}
}

void write()
{	for(int i=1; i<=n; i++) 
		printf("%d\n", c[i]); 
}

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

	return 0; 
}