Cod sursa(job #544553)

Utilizator Robert29FMI Tilica Robert Robert29 Data 1 martie 2011 19:47:38
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<stdio.h>
FILE*f=fopen("schi.in","r");
FILE*g=fopen("schi.out","w");
int x,v[30001],s[30001],n,i,a[150000];
void init(int nod,int st,int dr){
	if(st==dr){
		a[nod]=1;
		return ;
	}
	int nodst=nod<<1;
	int noddr=nodst+1;
	int m=(dr+st)>>1;
	init(nodst,st,m);
	init(noddr,m+1,dr);
	a[nod]=a[nodst]+a[noddr];
}
void query(int nod,int st,int dr,int poz){
	if(dr==st){
		x=st;
		a[nod]=0;
		return ;
	}
	int nodst=nod<<1;
	int noddr=nodst+1;
	int m=(st+dr)>>1;
	if(a[nodst]>=poz)
		query(nodst,st,m,poz);
	else
		query(noddr,m+1,dr,poz-a[nodst]);
	a[nod]=a[nodst]+a[noddr];
}
int main(){
	fscanf(f,"%d",&n);
	init (1,1,n);
	for(i=1;i<=n;++i)
		fscanf(f,"%d",&v[i]);
	for(i=n;i;--i){
		query(1,1,n,v[i]);
		s[x]=i;
	}
	for(i=1;i<=n;++i)
		fprintf(g,"%d\n",s[i]);
	fclose(g);
	fclose(f);
	return 0;
}