Cod sursa(job #3218710)

Utilizator Mihai_OctMihai Octavian Mihai_Oct Data 27 martie 2024 22:02:03
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("schi.in");
ofstream fout("schi.out");
int n, i, x[30002], aib[30002], r[30002];

static inline int Ub(int a) {
    return (a & -a);
}

static inline void Add(int a, int val) {
    for(int i = a; i <= n; i += Ub(i)) aib[i] += val;
}

static inline int Sum(int a) {
    int s = 0;
    for(int i = a; i >= 1; i -= Ub(i)) s += aib[i];
    return s;
}

static inline int Cb(int val) {
    int st = 1, dr = n;
    int poz = n;
    while(st <= dr) {
        int mij = st + (dr - st) / 2;
        int s = Sum(mij);
        if(s >= val) {
            poz = mij;
            dr = mij - 1;
        }
        else st = mij + 1;
    }
    return poz;
}

int main() {
    fin >> n;
    for(i = 1; i <= n; i++) {
        fin >> x[i];
        Add(i, 1);
    }
    for(i = n; i >= 1; i--) {
        int nm = Cb(x[i]);
        Add(nm, -1);
        r[nm] = i;
    }
    for(i = 1; i <= n; i++) fout << r[i] << "\n";

    return 0;
}