#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
const int N = 200000;
const int INF = 0x3f3f3f3f;
int aa[N + 1];
vector<int> ej[N + 1];
bool usedi[N + 1], useda[N + 1];
int dfs(int i) {
if (i < 0) {
int a = -i;
return useda[a] ? INF : a;
}
if (usedi[i])
return INF;
int a = INF;
for (int j : ej[i])
a = min(a, dfs(j));
return a;
}
bool dfs(int i, int a_) {
if (i < 0) {
int a = -i;
if (useda[a])
return false;
return useda[a] = a == a_;
}
if (usedi[i])
return false;
for (int j : ej[i])
if (dfs(j, a_))
return usedi[i] = true;
return false;
}
int main() {
ios_base::sync_with_stdio(false), cin.tie(NULL);
int n; cin >> n;
for (int i = 1; i <= n; i++)
cin >> aa[i], ej[i].push_back(-aa[i]);
for (int i = 1; i <= n; i++) {
int l = i << 1, r = l ^ 1, a_ = dfs(i);
if (l > n) {
cout << a_ << ' ', dfs(i, a_);
continue;
}
int al = aa[l];
if (r > n) {
if (a_ < al) {
cout << a_ << ' ', dfs(i, a_);
continue;
}
cout << al << ' ';
ej[l].clear();
ej[l].push_back(i);
continue;
}
int ar = aa[r];
if (a_ < al && a_ < ar) {
cout << a_ << ' ', dfs(i, a_);
continue;
}
if (al < ar) {
cout << al << ' ';
ej[l].clear();
ej[l].push_back(i);
continue;
}
cout << ar << ' ';
ej[l].push_back(i);
ej[r] = ej[l];
}
cout << '\n';
return 0;
}
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |