#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
int q;
int state[300005];
int level[300005];
int up[19][300005];
int search_ancestor(int node, int max_level) {
if (level[node] <= max_level) {
return node;
}
for (int lvl = 18; lvl >= 0; lvl--) {
if (level[up[lvl][node]] > max_level) {
node = up[lvl][node];
}
}
return up[0][node];
}
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
std::cin >> q;
for (int i = 1; i <= q; i++) {
std::cin >> state[i];
level[i] = 0;
if (state[i]<0) {
level[i] = -state[i];
int p = search_ancestor(i-1, level[i]-1);
up[0][i] = search_ancestor(p-1, level[i]-1);
for (int j = 1; j < 19; j++) {
up[j][i] = up[j-1][up[j-1][i]];
}
}
std::cout << state[search_ancestor(i, 0)] << "\n";
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |