#include<cstdio>
const int N=125005;
int n,i,v[N],sum[N],cnt,q[N];
int main(){
scanf("%d",&n);
for(i=1;;i++){
v[i]=v[i-(i&-i)]+1;
sum[i]=sum[i-1]+v[i];
if(sum[i]>=n)break;
}
for(;i;i--)if(sum[i-1]<n){
n-=v[i];
q[++cnt]=i;
}
printf("%d\n",cnt);
for(i=1;i<=cnt;i++)printf("%d%c",q[i],i<cnt?' ':'\n');
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include<cstdio> const int N=125005; int n,i,v[N],sum[N],cnt,q[N]; int main(){ scanf("%d",&n); for(i=1;;i++){ v[i]=v[i-(i&-i)]+1; sum[i]=sum[i-1]+v[i]; if(sum[i]>=n)break; } for(;i;i--)if(sum[i-1]<n){ n-=v[i]; q[++cnt]=i; } printf("%d\n",cnt); for(i=1;i<=cnt;i++)printf("%d%c",q[i],i<cnt?' ':'\n'); } |
English