Cod sursa(job #185734)

Utilizator toni2007Pripoae Teodor Anton toni2007 Data 25 aprilie 2008 22:43:51
Problema Schi Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <stdio.h>
#include <stdlib.h>
#define lmax 65536
#define nmax 32768
#define left (i<<1)
#define right ((i<<1)|1)
#define mij ((a+b)>>1)
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;i<=n;++i)
        scanf("%d",&A[i]);
    init(1,1,n);
    for(i=n;i;i--)
        sol[query(1,1,n,A[i])]=i;
    for (i=1;i<=n;++i)
        printf("%d\n",sol[i]);
    return 0;
}