Cod sursa(job #159959)

Utilizator razvi9Jurca Razvan razvi9 Data 14 martie 2008 16:11:52
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<cstdio>
using namespace std;
int n,a[30001],b[100000],c[30001],i,j,s,k;

void add(int poz,int st,int dr,int i)
{
	b[poz]++;
	if(st==dr) return;
	int mij=(st+dr)>>1,p=poz<<1;
	if(i<=mij) add(p,st,mij,i);
	else add(p+1,mij+1,dr,i);
}

int query(int poz,int st,int dr,int i)
{
	if(st==dr) return st;
	int mij=(st+dr)>>1,p=poz<<1;
	int aux=mij-st+1-b[p];
	if(aux<i) return query(p+1,mij+1,dr,i-aux);
	else return query(p,st,mij,i);
}

int main()
{
	freopen("schi.in","r",stdin);
	freopen("schi.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		scanf("%d",&a[i]);
	for(i=n;i>=1;i--){
		k=query(1,1,n,a[i]);
		add(1,1,n,k);
		c[k]=i;}
	for(i=1;i<=n;i++)
		printf("%d\n",c[i]);
	fclose(stdout);
	return 0;
}