Cod sursa(job #643442)

Utilizator d.andreiDiaconeasa Andrei d.andrei Data 3 decembrie 2011 18:21:14
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <cstdio>

#define file_in "schi.in"
#define file_out "schi.out"

#define lsb(x) ((x)&(-(x)))

#define nmax 35000

int N,Aib[nmax],V[nmax],P[nmax];

void add(int poz, int val){
	
	int i;
	
	for (i=poz;i<=N;i+=lsb(i))
		 Aib[i]+=val;
}

int sol(int poz){
	
	int i,ans=0;
	
	for (i=poz;i>=1;i-=lsb(i))
		 ans+=Aib[i];
	return ans;
}

int cauta(int k){
	
	int i,step;
	
	for (step=1;step<=N;step<<=1);
	for (i=N;step;step>>=1)
		 if (i-step>=1){
			 int X=sol(i-step);
			 if (k<=X)
				 i-=step;
		 }
	return i;
}



int main(){
	
	int i;
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d", &N);
	for (i=1;i<=N;++i){
		scanf("%d", &V[i]);
		add(i,1);
	}
	
	for (i=N;i>=1;--i){
		
		int X=cauta(V[i]);
		P[X]=i;
		add(X,-1);
	}
	
	for (i=1;i<=N;++i)
		 printf("%d\n", P[i]);
	
	return 0;
	
}