Cod sursa(job #419335)

Utilizator AndrewXJuduc Paul Andrei AndrewX Data 17 martie 2010 12:20:58
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
int x[30001],a[180001],c[30001],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];
}


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


int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
	scanf("%d",&x[i]);
update(1,n,i,1,1);
}
for(int i=n;i>0;i--)
{
int p=qr(1,n,x[i],1);
c[p]=i;
update(1,n,p,1,0);
}

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