Cod sursa(job #39364)

Utilizator DITzoneCAdrian Diaconu DITzoneC Data 26 martie 2007 17:48:16
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <stdio.h>

#define lmax 65536
#define nmax 32768
#define left (i<<1)
#define right ((i<<1)|1)
#define mij ((a+b)>>1)
#define FOR(i,s,d) for(i=(s);i<(d);++i)

short int H[lmax];
int n,sol[nmax],A[nmax];

int init(int i,int a,int b)
{
    if(a>b)
	return 0;
    if(a==b)
	H[i]=1;
    else
	H[i]=init(left,a,mij)+init(right,mij+1,b);
    return H[i];
}

int query(int i,int a,int b,int x)
{
    H[i]--;
    if(a==b)
	return a;
    if(H[left]>=x)
	return query(left,a,mij,x);
    else
	return query(right,mij+1,b,x-H[left]);
}

int main()
{
    freopen("schi.in","r",stdin);
    freopen("schi.out","w",stdout);
    scanf("%d",&n);
    int i;
    FOR(i,1,n+1)
	scanf("%d",&A[i]);
    init(1,1,n);
    for(i=n;i;i--)
	sol[query(1,1,n,A[i])]=i;
    FOR(i,1,n+1)
	printf("%d\n",sol[i]);
    return 0;
}