Submission #1315558

#TimeUsernameProblemLanguageResultExecution timeMemory
1315558majawieczorekmedians (balkan11_medians)C++20
20 / 100
54 ms6124 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 10;
int medians[N], tab[2 * N + 10], used[2 * N + 10], sign[2 * N + 10];

vector <int> UnUsed;
priority_queue <pair<int, int>> Q;

int main() {
    //-1 mniejsza, 0 rowna, +1 wieksza
    int n; cin >> n;

    for(int i = 1; i <= n; i++) {
        cin >> medians[i];
    }
    tab[1] = medians[1];
    used[tab[1]] = true;


    for(int i = 2; i <= n; i++) {
        if(medians[i] == medians[i - 1]) {
            sign[2 * i - 1] = -1;
            sign[2 * i - 2] = 1;
        }
        if(medians[i - 1] < medians[i]) {
            if(used[medians[i]]) {
                sign[2 * i - 1] = 1;
                sign[2 * i - 2] = 1;
            }
            else {
                sign[2 * i - 1] = 0;
                sign[2 * i - 2] = 1;
            }
        }
        if(medians[i - 1] > medians[i]) {
            if(used[medians[i]]) {
                sign[2 * i - 1] = -1;
                sign[2 * i - 2] = -1;
            }
            else {
                sign[2 * i - 1] = 0;
                sign[2 * i - 2] = -1;
            }
        }

        tab[2 * i - 1] = tab[2 * i - 2] = medians[i];
        used[medians[i]] = true;
    }

    for(int i = 2 * n - 1; i >= 1; i--) {

        if(sign[i] == -1) Q.push({-tab[i], i});
        if(sign[i] == 1) Q.push({tab[i], i});

        if(!used[i]) UnUsed.push_back(i);
    }

    for(auto x : UnUsed) {
        tab[Q.top().second] = x;
        Q.pop();
    }

    
    for(int i = 1; i <= 2 * n - 1; i++) {
        cout << tab[i] << ' ';
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...