#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |