Cod sursa(job #2207668)

Utilizator Constantin.Dragancea Constantin Constantin. Data 26 mai 2018 12:27:34
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <bits/stdc++.h>
using namespace std;
#define L nod << 1
#define R L | 1

const int N = 30005;
int n, pos, val, b[N], a[4*N], c[N];

void update(int nod, int st, int dr){
    if (st == dr){
        a[nod] = 0;
        c[st] = val;
        return;
    }
    int mid = (st + dr) >> 1;
    if (pos <= a[L]) update(L, st, mid);
    else pos -= a[L], update(R, mid + 1, dr);
    a[nod] = a[R] + a[L];
}

void build(int nod, int st, int dr){
    if (st == dr){
        a[nod] = 1;
        return;
    }
    int mid = (st + dr) >> 1;
    build(L, st, mid);
    build(R, mid + 1, dr);
    a[nod] = a[L] + a[R];
}

int main(){
    ifstream cin ("schi.in");
    ofstream cout ("schi.out");
    cin >> n;
    for (int i=1; i<=n; i++) cin >> b[i];
    build(1, 1, n);
    for (int i=n; i; i--){
        pos = b[i];
        val = i;
        update(1, 1, n);
    }
    for (int i=1; i<=n; i++) cout << c[i] << "\n";
    return 0;
}