Submission #131907

#TimeUsernameProblemLanguageResultExecution timeMemory
131907DiuvenZalmoxis (BOI18_zalmoxis)C++14
100 / 100
261 ms39820 KiB
#include <bits/stdc++.h>
using namespace std;

vector<int> S;
list<int> A;
queue<list<int>::iterator> P;

int n, k;

void comp(){
	int s = S.size();
	while(s>1 && S[s-1]==S[s-2]) S[s-2]++, s--, S.pop_back();
}

void put(int x, bool b){
	S.push_back(x); A.push_back(x);
	if(b) P.push(prev(A.end()));
	comp();
}

int main(){
	ios::sync_with_stdio(0); cin.tie(0);

	cin>>n>>k;
	for(int i=1; i<=n; i++){
		int x; cin>>x;
		if(S.empty() || S.back()>x){ put(x,0); continue; }
		while(S.back()<x) put(S.back(),1);
		put(x,0);
	}
	while(S.back()!=30) put(S.back(),1);
	while(int(A.size())<n+k){
		auto it = P.front();
		if(*it==0){ P.pop(); continue; }
		(*it)--, P.push(A.insert(it, *it));
	}
	for(int x:A) cout<<x<<' ';

	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...