//cre: http://www.boi2011.ro/resurse/tasks/medians-sol.pdf
//problem is being solved by greedy 
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int N;
    cin >> N;
    vector<int> Tab(N), used(2 * N);
    vector<int> ans;
    int L = 1, R = 2 * N - 1;
    for (int i = 0; i < N; i++)
    {
        while (used[L])
            L++;
        while (used[R])
            R--;
        cin >> Tab[i];
        if (i == 0)
        {
            ans.push_back(Tab[i]);
            used[Tab[i]] = 1;
            continue;
        }
        if (Tab[i] == Tab[i - 1])
        {
            ans.push_back(L);
            ans.push_back(R);
            used[L] = used[R] = 1;
            continue;
        }
        if (Tab[i] > Tab[i - 1])
        {
            ans.push_back(R);
            used[R] = 1;
            while (used[R])
                R--;
        }
        else
        {
            ans.push_back(L);
            used[L] = 1;
            while (used[L])
                L++;
        }
        if (used[Tab[i]] == 0)
        {
            ans.push_back(Tab[i]);
            used[Tab[i]] = 1;
        }
        else
        {
            if (Tab[i] > Tab[i - 1])
                ans.push_back(R), used[R] = 1;
            else
                ans.push_back(L), used[L] = 1;
        }
    }
    for (int i = 0; i < 2 * N - 1; i++)
        cout << ans[i] << ' ';
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |