Cod sursa(job #2181162)

Utilizator TooHappyMarchitan Teodor TooHappy Data 21 martie 2018 15:01:29
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <bits/stdc++.h>
using namespace std;
     
ifstream in("schi.in");
ofstream out("schi.out");

const int NMax = 3e4 + 5;

int a[NMax], aInt[4 * NMax], sol[NMax];

void build(int currentPoz, int l, int r) {
    if(l == r) {
        aInt[currentPoz] = 1;
        return;
    }

    int mid = (l + r) / 2;
    build(2 * currentPoz, l, mid);
    build(2 * currentPoz + 1, mid + 1, r);
    aInt[currentPoz] = aInt[2 * currentPoz] + aInt[2 * currentPoz + 1];
}

void update(int currentPoz, int l, int r, int targetPoz, int value) {
    if(l == r) {
        aInt[currentPoz] = 0;
        sol[l] = value;
        return;
    }

    int mid = (l + r) / 2;
    if(targetPoz <= aInt[2 * currentPoz]) {
        update(2 * currentPoz, l, mid, targetPoz, value);
    } else {
        update(2 * currentPoz + 1, mid + 1, r, targetPoz - aInt[2 * currentPoz], value);
    }
    aInt[currentPoz] = aInt[2 * currentPoz] + aInt[2 * currentPoz + 1];
}

int main() {
    ios::sync_with_stdio(false); in.tie(0); out.tie(0);
   
    int n; in >> n;
    for(int i = 1; i <= n; ++i) {
        in >> a[i];
    }

    build(1, 1, n);

    for(int i = n; i >= 1; --i) {
        update(1, 1, n, a[i], i);
    }

    for(int i = 1; i <= n; ++i) {
        out << sol[i] << '\n';
    }
      
    in.close(); out.close();
     
    return 0;
}