Cod sursa(job #1808656)

Utilizator giotoPopescu Ioan gioto Data 17 noiembrie 2016 22:32:35
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <cstdio>
using namespace std;

int pos, n, Arb[120005], Sol[120005], x[120005];
inline void Update(int st ,int dr, int nod, int i, int pos){
    if(st == dr){
        Arb[nod] = 1;
        Sol[st] = i;
        return ;
    }
    int mij = (st + dr) / 2;
    if(mij - st + 1 - Arb[nod * 2] >= pos) Update(st, mij, nod * 2, i, pos);
    else Update(mij + 1, dr, nod * 2 + 1, i, pos - (mij - st + 1 - Arb[nod * 2]));
    Arb[nod] = Arb[nod * 2] + Arb[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]);
    for(int i = n; i >= 1 ; --i){
        Update(1, n, 1, i, x[i]);
    }
    for(int i = 1; i <= n ; ++i)
        printf("%d\n", Sol[i]);
    return 0;
}