Submission #674051

#TimeUsernameProblemLanguageResultExecution timeMemory
674051Ahmed57medians (balkan11_medians)C++14
100 / 100
89 ms11716 KiB
#include <bits/stdc++.h>

using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
int main(){
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    ordered_set s;
    int n;cin>>n;
    int l = 1 , r = 2*n-1;
    int vis[2*n] = {0};
    for(int i = 1;i<=n;i++){
        long long x;cin>>x;
        if(i==1){
            cout<<x<<" ";
            s.insert(x);
            vis[x] = 1;
            continue;
        }
        int c = s.order_of_key(x);
        int rem = (2*(i-1)-1)-c;
        if(vis[x])rem--;
        if(vis[x]){
            if(c>rem){
                while(vis[r])r--;
                vis[r] = 1;
                cout<<r<<" ";
                s.insert(r--);
                while(vis[r])r--;
                vis[r] = 1;
                cout<<r<<" ";
                s.insert(r--);
            }else if(c==rem){
                while(vis[l])l++;
                while(vis[r])r--;
                vis[l] = 1;
                vis[r] = 1;
                s.insert(l);
                s.insert(r);
                cout<<l++<<" ";
                cout<<r--<<" ";
            }else{
                while(vis[l])l++;
                vis[l] = 1;
                cout<<l<<" ";
                s.insert(l++);
                while(vis[l])l++;
                vis[l] = 1;
                cout<<l<<" ";
                s.insert(l++);
            }
        }else{
        if(c>rem){
            vis[x] = 1;
            while(vis[r])r--;
            s.insert(r);
            s.insert(x);
            vis[r] = 1;
            cout<<r--<<" ";
            cout<<x<<" ";
        }else if(rem>c){
            vis[x] = 1;
            while(vis[l])l++;
            s.insert(l);
            s.insert(x);
            vis[l] = 1;
            cout<<l++<<" ";
            cout<<x<<" ";
        }else{
            while(vis[l])l++;
            while(vis[r])r--;
            vis[l] = 1;
            vis[r] = 1;
            s.insert(l);
            s.insert(r);
            cout<<l++<<" ";
            cout<<r--<<" ";
        }
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...