Submission #1229923

#TimeUsernameProblemLanguageResultExecution timeMemory
1229923MuhammadSaramZalmoxis (BOI18_zalmoxis)C++20
5 / 100
153 ms6472 KiB
#include <bits/stdc++.h>

using namespace std;

const int M = 31;

int cnt[M],us[M],ad[M];
vector<int> v1[M];

int main()
{
	int n,k;
	cin>>n>>k;
	int a[n];
	for (int i=0;i<n;i++)
		cin>>a[i],cnt[a[i]]++;
	for (int i=0;i<M-1;i++)
	{
		if ((cnt[i]+us[i])%2)
			ad[i]++,k--;
		us[i+1]=(cnt[i]+us[i]+ad[i])/2;
	}
	int pr=-1;
	for (int i=0;i<M;i++)
	{
		if (cnt[i]) pr=i;
		if (ad[i]) v1[pr].push_back(i);
	}
	for (int i=0;i<n;i++)
	{
		if (v1[a[i]].size())
		{
			vector<int> v=v1[a[i]];
			stack<int> st;
			while (k && v.size())
			{
				int x=v.back();v.pop_back();
				if (!x)
				{
					st.push(x);
					continue;
				}
				k--,v.push_back(x-1),v.push_back(x-1);
			}
			sort(v.begin(),v.end());
			reverse(v.begin(),v.end());
			for (int x:v)
				cout<<x<<' ';
			while (!st.empty())
				cout<<st.top()<<' ',st.pop();
			v1[a[i]].clear();
		}
		cout<<a[i]<<' ';
	}
	cout<<endl;
	
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...