#include <bits/stdc++.h>
using namespace std;
int bitpref[1000000+6];
int bsearch(int x){
int l=1,p=1000000,s;
while(l<p){
s = (l+p)/2;
if(bitpref[s]>=x){
p=s;
}
else{
l=s+1;
}
}
return l;
}
vector<int> ret;
int main(){
/* cin.tie(0);
cout.tie(0);
ios_base::sync_with_stdio(0); */
int n;
cin>>n;
for(int i=1;i<=1000003;i++){
bitpref[i] = bitpref[i-1]+__builtin_popcount(i);
}
int k;
while(n>0){
k = bsearch(n);
ret.push_back(k);
n-=__builtin_popcount(k);
}
cout<<ret.size()<<'\n';
reverse(ret.begin(),ret.end());
while(ret.size()){
cout<<ret.back()<<' ';
ret.pop_back();
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #include <bits/stdc++.h> using namespace std; int bitpref[1000000+6]; int bsearch(int x){ int l=1,p=1000000,s; while(l<p){ s = (l+p)/2; if(bitpref[s]>=x){ p=s; } else{ l=s+1; } } return l; } vector<int> ret; int main(){ /* cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0); */ int n; cin>>n; for(int i=1;i<=1000003;i++){ bitpref[i] = bitpref[i-1]+__builtin_popcount(i); } int k; while(n>0){ k = bsearch(n); ret.push_back(k); n-=__builtin_popcount(k); } cout<<ret.size()<<'\n'; reverse(ret.begin(),ret.end()); while(ret.size()){ cout<<ret.back()<<' '; ret.pop_back(); } return 0; } |
English