Submission #537729

#TimeUsernameProblemLanguageResultExecution timeMemory
537729pokmui9909Swap (BOI16_swap)C++17
68 / 100
1080 ms2384 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int N; int A[200005]; int D[200005]; int f(int n, int c){ int l = n * 2, r = n * 2 + 1; vector<int> ret, t; if(l > N && r > N){ return n; } else if(r > N){ if(A[l] > c) return n; else return l; } else if(c < A[l] && c < A[r]){ return n; } else if(A[l] < c && A[l] < A[r]){ return f(l, c); } else if(A[r] < c && A[r] < A[l]){ int k = min(c, A[l]); int p = f(l, k), q = f(r, k); if(p < q){ if(k == c) return p; else return f(r, c); } else { if(k == c) return q; else return f(l, c); } } return -1; } int num = 0; int main(){ cin.tie(0) -> sync_with_stdio(false); fill(A, A + 200005, 300005); cin >> N; for(int i = 1; i <= N; i++){ cin >> A[i]; } for(int i = 1; i <= N; i++){ int l = i * 2, r = i * 2 + 1; if(l > N) continue; if(A[i] < A[l] && A[i] < A[r]){ continue; } else if(A[l] < A[i] && A[l] < A[r]){ swap(A[i], A[l]); } else { int k = min(A[i], A[l]), t = max(A[i], A[l]); int p = f(l, k), q = f(r, k); A[i] = A[r]; if(p < q){ A[l] = k, A[r] = t; } else { A[l] = t, A[r] = k; } } } for(int i = 1; i <= N; i++){ cout << A[i] << ' '; } }
#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...