Cod sursa(job #606852)

Utilizator vendettaSalajan Razvan vendetta Data 10 august 2011 12:36:09
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <cstdio>
// ATENTIE LA CITIRE
#define nmax 30001
#define f "schi.in"
#define g "schi.out"


int t[nmax*4], v[nmax], n, m, sol[nmax];

void build(int nod, int st, int dr){
    if (st == dr){
        t[nod]=1;
        return;
    }
    int mij = (st + dr)/2;
    if (st <= mij) build(nod*2, st, mij);
    if (dr > mij) build(nod*2+1, mij+1, dr);
    t[nod]=t[nod*2] + t[nod*2+1];
}

int query(int nod, int st, int dr, int val){
    t[nod]--;
    if (st == dr){
        return st;
    }
    int mij=(st + dr) / 2;
    if (t[nod*2]>=val) query(nod*2, st, mij, val);
    else query(nod*2+1, mij+1, dr, val - t[nod*2]);
}

int main(){

    freopen(f,"r",stdin);
    freopen(g,"w",stdout);
    scanf("%d\n",&n);
    for(int i=1; i<=n; i++){
        scanf("%d\n",&v[i]);
    }

    build(1,1,n);
    for(int i=n; i; i--){
        sol[query(1, 1, n, v[i])]=i;
    }
    //printf("muie");
    for(int i=1; i<=n; i++) printf("%d\n",sol[i]);
    return 0;
}