Cod sursa(job #1539036)

Utilizator theep0Cruceru Radu theep0 Data 30 noiembrie 2015 06:30:51
Problema Schi Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>

#define MN 30001
#define FOR(i, a, b) for(i = (a); i <= (b); i++)
#define iFOR(j, a, b) for(j = (a); j >= (b); j--)

int s[MN], sol[MN];
int arb[4*MN];

void init(int i, int l, int r) {
    int m;
    if (l == r) {
        arb[i] = 1;
    } else {
        init(i * 2, l, (l+r)/2);
        init(i * 2 + 1, (l+r)/2+1, r);
        arb[i] = arb[i*2] + arb[i*2+1];
    }
}

int query(int i, int l, int r, int v) {
    int rez;
    if (l == r) {
        arb[i] = 0;
        return l;
    }
    else {
        if (arb[i*2] >= v) {
            rez = query(i*2, l, (l+r)/2, v);
        } else {
            rez = query(i*2+1, (l+r)/2+1, r, v-arb[i*2]);
        }
        arb[i] = arb[i*2] + arb[i*2+1];
        return rez;
    }
}

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