Submission #537734

#TimeUsernameProblemLanguageResultExecution timeMemory
537734pokmui9909Swap (BOI16_swap)C++17
68 / 100
1096 ms2388 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...