Pagini recente » Cod sursa (job #1252926) | Cod sursa (job #1104306) | Cod sursa (job #2201491) | Cod sursa (job #1719979) | Cod sursa (job #2230432)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
const int N=1000000+5;
int n,k,v[N];
int sol[N],cnts=0;
int st[N],vf=0;
bool is[N];
inline void b(int x) /// b in stiva
{
if(vf==0)
{
st[++vf]=x;
return;
}
if(x==st[vf])
{
st[vf]++;
while(vf>=2 && st[vf]==st[vf-1])
{
vf--;
st[vf]++;
}
return;
}
if(st[vf]>x)
{
st[++vf]=x;
return;
}
while(st[vf]<x)
{
sol[++cnts]=st[vf];
st[vf]++;
while(vf>=2 && st[vf]==st[vf-1])
{
vf--;
st[vf]++;
}
}
st[++vf]=x;
while(vf>=2 && st[vf]==st[vf-1])
{
vf--;
st[vf]++;
}
}
bool spec[N];
int cate[N];
int mi[N];
int aux[N];
bool is2[N];
int aux3[N];
int main()
{
freopen("zalmoxis.in","r",stdin);
freopen("zalmoxis.out","w",stdout);
// ios_base::sync_with_stdio(false); cin.tie(0);
cin>>n>>k;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
b(x);
sol[++cnts]=x;
is[cnts]=1;
}
while(vf>1)
{
sol[++cnts]=st[vf];
st[vf]++;
while(vf>=2 && st[vf]==st[vf-1])
{
vf--;
st[vf]++;
}
}
while(st[vf]!=30)
{
sol[++cnts]=st[vf];
st[vf]++;
}
int lft=n+k-cnts;
int ind=0;
int p2=0;
for(int i=1;i<=cnts;i++)
{
cate[i]=1;
mi[i]=sol[i];
if(is[i])
{
aux[++p2]=mi[i]; is2[p2]=1;
continue;
}
int sz=(1<<(sol[i]-1));
int cnt=1;
for(int j=sz;j>=1;j/=2)
{
if(j-1<=lft)
{
lft-=(j-1);
mi[i]=cnt;
cate[i]=j;
break;
}
cnt++;
}
for(int j=1;j<=cate[i];j++)
aux[++p2]=mi[i],is2[p2]=0;
}
while(lft>0)
{
cnts=p2;
for(int i=1;i<=cnts;i++)
{
sol[i]=aux[i];
is[i]=is2[i];
}
p2=0;
for(int i=1;i<=cnts;i++)
{
cate[i]=1;
mi[i]=sol[i];
if(is[i])
{
aux[++p2]=mi[i]; is2[p2]=1;
continue;
}
int sz=(1<<(sol[i]-1));
int cnt=1;
for(int j=sz;j>=1;j/=2)
{
if(j-1<=lft)
{
lft-=(j-1);
mi[i]=cnt;
cate[i]=j;
break;
}
cnt++;
}
for(int j=1;j<=cate[i];j++)
aux[++p2]=mi[i],is2[p2]=0;
}
}
// cout<<lft<<"\n";
for(int i=1;i<=p2;i++)
{
cout<<aux[i]<<" ";
}
cout<<"\n";
return 0;
}
/**
2
**/