Cod sursa(job #3182809)

Utilizator Allie28Radu Alesia Allie28 Data 9 decembrie 2023 17:23:13
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.75 kb
#include <fstream>
#include <iostream>
#include <queue>
#include <cstring>
#include <vector>

using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");

const int LMAX = 30005;
int aint[LMAX*3], v[LMAX], sol[LMAX], i;

int build(int nod, int st, int dr) {
    if (st == dr) {
        aint[nod] = 1;
        return aint[nod];
    }
    else {
        int mij = ((st + dr)>>1);
        aint[nod] = build(nod*2, st, mij) + build(nod*2 + 1, mij+1, dr);
        return aint[nod];
    }
}
int update(int nod, int st, int dr, int k) {
    if (st == dr) {
        sol[st] = i;
        aint[nod] = 0;
        return aint[nod];
    }
    else {
        int mij = ((st + dr)>>1);
        if (aint[2*nod] >= k) {
            aint[nod] = update(2*nod, st, mij, k) + aint[nod*2 + 1];

        }
        else {
            aint[nod] = update(2*nod + 1, mij + 1, dr, k - aint[nod*2]) + aint[nod*2];
        }
        return aint[nod];
    }
}
/*int query1(int nod, int st, int dr, int a, int b) {
    if (st == dr && st == a) {
        aint[nod] = b;
        return aint[nod];
    }
    else {
        int mij = ((st + dr) >> 1);
        if (mij >= a) {
            aint[nod] = max(aint[nod * 2 + 1], query1(nod*2, st, mij,a , b));
        }
        else {
            aint[nod] = max(aint[nod * 2], query1(nod*2 + 1, mij+1, dr, a, b));
        }
        return aint[nod];
    }
}*/

int main() {
    int n, m, a, b;
    bool op;
    fin >> n;
    for (i = 1; i <= n; i++) {
        fin >> v[i];
    }
    build(1,1, n);
    for (i = n; i >= 1; i--) {
        update(1, 1, n, v[i]);
    }
    for (i = 1; i <= n; i++) {
        fout << sol[i] << endl;
    }




    fin.close();
    fout.close();

    return 0;
}