This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<iostream>
#include<stack>
#include<vector>
#define pb push_back
#define ll long long
#define pii pair<int, int>
#define xx first
#define yy second
#define MAXN 1000010
using namespace std;
int n, k, a[MAXN];
vector<int> dodao[MAXN];
stack<int> st;
void deli (int x)
{
if (x==0) { cout<<x<<" "; return; }
k--;
if (k>0) { deli(x-1); if (k>0) deli(x-1); else cout<<x-1<<" "; }
else cout<<x-1<<" "<<x-1<<" ";
}
void ispisi()
{
stack<int> st1=st;
while (!st1.empty()) { cout<<st1.top()<<" "; st1.pop(); }
cout<<endl;
}
int main() {
cin>>n>>k;
for (int i=1; i<=n; i++) cin>>a[i];
a[n+1]=30;
for (int i=1; i<=n+1; i++)
{
if (st.empty() || a[i]<st.top()) st.push(a[i]);
else if (a[i]==st.top())
{
int sta=a[i];
while (!st.empty() && sta==st.top())
{
st.pop(); sta++;
}
st.push(sta);
}
else
{
while (st.top()<a[i])
{
int sta=st.top(); dodao[i].pb(sta);
while (!st.empty() && sta==st.top()) {
st.pop();
sta++;
}
st.push(sta);
}
int sta=a[i];
while (!st.empty() && sta==st.top())
{
st.pop(); sta++;
}
st.push(sta);
}
/*cout<<i<<":"<<endl;
ispisi();
cout<<"A dodao sam: "<<endl;
for (auto x:dodao[i]) cout<<x<<" ";
if (dodao[i].size()) cout<<endl;*/
}
/*while (!st.empty() && st.top()!=30) {
dodao[n + 1].pb(st.top());
st.top()++;
}*/
for (int i=1; i<=n+1; i++) k-=dodao[i].size();
for (int i=1; i<=n+1; i++)
{
for (auto x:dodao[i])
{
if (k>0) deli(x);
else cout<<x<<" ";
}
if (i<=n) cout<<a[i]<<" ";
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |