Cod sursa(job #1847683)

Utilizator dan89Stan Alexandru dan89 Data 14 ianuarie 2017 21:05:27
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#define in "schi.in"
#define out "schi.out"
#define maxn 30005

struct tree {
    tree *left;
    tree *right;
    int st;
    int dr;
    int position;
};

int rez[maxn];
int add[maxn*4];

void updateTree(int node, int l, int r, int member, int pos) {
    if (l == r) {
        add[node] = 1;
        rez[l] = member;
        return;
    }

    int mid = (l+r) / 2;

    int p = add[2*node];

    if (mid-p >= pos) {
        updateTree(2*node, l, mid, member, pos);
    } else {
        updateTree(2*node+1, mid+1, r, member, pos+p);
    }
    add[node] = add[2*node] + add[2*node+1];
}

int main() {
    freopen(in, "r", stdin);
    freopen(out, "w", stdout);

    int N;
    scanf("%d", &N);

    int v[maxn];
    for (int i=1; i<=N; i++) {
        scanf("%d", &v[i]);
    }

    for (int i =N; i>0; --i) {
        updateTree(1,1, N, i, v[i]);
    }
    for (int i=1; i<=N; i++) {
        printf("%d\n", rez[i]);
    }
    return 0;
}