#include<iostream>
#include <vector>
using namespace std;
int main(){
int N;
cin >> N;
vector<int> B(N);
vector<bool> available(2 * N -1, true);
int first = 0;
int last = 2 * N - 2;
for (int i=0;i<N;i++) cin >> B[i];
vector<int> A(2*N - 1);
A[0] = B[0];
available[B[0] - 1] = false;
for (int i=1;i<N;i++){
if (B[i] == B[i - 1]){
while (!available[first]) first++;
while (!available[last]) last--;
A[2 * i - 1] = first + 1;
A[2 * i] = last + 1;
available[last] = false;
available[first] = false;
}
if (B[i] > B[i - 1]){
if (available[B[i] - 1]) {
A[2 * i - 1] = B[i];
available[B[i] - 1] = false;
} else {
while (!available[last]) last--;
A[2 * i - 1] = last + 1;
available[last] = false;
}
while (!available[last]) last--;
A[2 * i] = last + 1;
available[last] = false;
}
if (B[i] < B[i - 1]){
if (available[B[i] - 1]) {
A[2 * i - 1] = B[i];
available[B[i] - 1] = false;
} else {
while (!available[first]) first++;
A[2 * i - 1] = first + 1;
available[first] = false;
}
while (!available[first]) first++;
A[2 * i] = first + 1;
available[first] = false;
}
}
for (int i=0;i<A.size();i++) cout << A[i] << " ";
cout << endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |