Submission #139294

#TimeUsernameProblemLanguageResultExecution timeMemory
139294mechfrog88Zalmoxis (BOI18_zalmoxis)C++14
0 / 100
272 ms57808 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#pragma GCC optimize("unroll-loops,no-stack-protector")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
 
using namespace __gnu_pbds;
using namespace std;
 
template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
 
typedef long long ll;
typedef long double ld; 
 
 
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    ll n,k;
    cin >> n >> k;
    list <pair<ll,ll>> arr;
    vector <ll> ori;
    vector <ll> num(30,0);
    ll mini = 30;
    for (int z=0;z<n;z++){
        ll temp;
        cin >> temp;
        num[temp]++;
        mini = min(temp,mini);
        arr.push_back(make_pair(temp,z));
        ori.push_back(temp);
    }
    for (auto it = arr.begin();it != arr.end();){
        auto ita = it;
        ita++;
        if (it->first == ita->first && ita->first == mini){
            auto p = it;
            bool ok = true;
            if (p == arr.begin()) ok = false;
            if (p != arr.begin()) p--;
            if (p != arr.begin()) p--;
            arr.insert(it,make_pair(it->first+1,it->second));
            arr.erase(it);
            arr.erase(ita);
            if (!ok) it = arr.begin();
            else it = p;
            num[mini]-=2;
            num[mini+1]++;
            if (num[mini] == 0){
                mini++;
            }
        } else {
            it++;
        }
        // for (auto itq = arr.begin();itq != arr.end();itq++){
        //     cout << itq->first << " ";
        // } cout << endl;
    }
    ll i = 0;
    ll q = 0;
    arr.push_back(make_pair(LLONG_MAX,0));
    for (auto it = arr.begin();it != arr.end();it++){
        if (it->first == mini){
            i = it->second;
            q = it->first;
            break;
        }
    }
    for (int z=0;z<n;z++){
        if (z == i) cout << q << " ";
        cout << ori[z] << " ";
    }
    cout << endl;
}

// 29 29
// 28 28 28 28
// 28 27 27 28 27 27
// 28 27 26 28 27 25 25 26
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...