Submission #1240095

#TimeUsernameProblemLanguageResultExecution timeMemory
1240095kaiboySwap (BOI16_swap)C++20
100 / 100
54 ms13640 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...