Cod sursa(job #3257854)

Utilizator KRISTY06Mateiu Ianis Cristian Vasile KRISTY06 Data 19 noiembrie 2024 18:19:21
Problema Schi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <bits/stdc++.h>
using namespace std;

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

deque<int> tree[120001];

void update(int left, int right, int currentNode, int startPos, int endPos, deque<int> &newRanks) {
    if (right < startPos || left > endPos) {
        return;
    } else if (left == right) {
        tree[currentNode].clear();
        tree[currentNode].push_back(newRanks.front());
        newRanks.pop_front();
        return;
    }
    update(left, (left + right) / 2, currentNode * 2, startPos, endPos, newRanks);
    update((left + right) / 2 + 1, right, currentNode * 2 + 1, startPos, endPos, newRanks);
    tree[currentNode].assign(tree[currentNode * 2].begin(), tree[currentNode * 2].end());
    tree[currentNode].insert(tree[currentNode].end(), tree[currentNode * 2 + 1].begin(), tree[currentNode * 2 + 1].end());
}

int main() {
    int n;
    fin >> n;
    for (int i = 1; i <= n; ++i) {
        int rankOccupied;
        fin >> rankOccupied;
        deque<int> newRanks;
        newRanks.assign(tree[1].begin() + rankOccupied - 1, tree[1].end());
        newRanks.push_front(i);
        update(1, n, 1, rankOccupied, i, newRanks);
    }
    for (int i = 0; i < n; ++i) {
        fout << tree[1][i] << '\n';
    }
    return 0;
}

/*


*/