Pagini recente » Cod sursa (job #538250) | Cod sursa (job #3226637) | Cod sursa (job #717250) | Cod sursa (job #1419684) | Cod sursa (job #3257854)
#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;
}
/*
*/