#include<bits/stdc++.h>
#define ll long long
#define fo(i,l,r) for(int i=l;i<=r;i++)
using namespace std;
ll n,k,limit=100000,a[200005],tp,tmp,cnt;
int main(){
cin>>n>>k;
tp=n;
while(tp)cnt+=(a[limit+(tmp++)]=tp&1),tp>>=1;
if(cnt>k)return cout<<"No",0;
puts("Yes");
while(cnt<k){
if(cnt+a[limit+tmp]>k)break;
cnt+=a[limit+tmp],a[limit+tmp-1]+=a[limit+tmp]*2,a[limit+(tmp--)]=0;
}
for(int i=200000;i;i--)
if(a[i])tmp=i;
while(cnt<k){
if(cnt+a[tmp]>k){
a[tmp]-=k-cnt,a[tmp-1]=(k-cnt)*2;
break;
}
cnt+=a[tmp],a[tmp-1]=a[tmp]*2,a[tmp--]=0;
}
for(int i=200000;i;i--)
fo(j,1,a[i])printf("%d ",i-limit);
return 0;
}
评测记录
;https://vjudge.net/solution/45042668/origin