#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N=1000100;
int cn[N];
int pref[N];
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
int n;cin>>n;
pref[0]=0;
for (int i=0;i<=n;i++) cn[i]=__builtin_popcount(i);
for (int i=1;i<=n;i++) pref[i]=pref[i-1]+cn[i];
vector<int>ans;
int R=n;
while (n>0){
R=lower_bound(pref+1,pref+R+1,n)-pref;
ans.push_back(R);
n-=cn[R--];
}
cout<<ans.size()<<endl;
for (int i:ans) cout<<i<<" ";
cout<<endl;
// for (int j=0;j+1<ans.size();j++){
// if (ans[j]-1!=ans[j+1]) exit(1);
// }
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 | #include<bits/stdc++.h> typedef long long ll; using namespace std; const int N=1000100; int cn[N]; int pref[N]; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n;cin>>n; pref[0]=0; for (int i=0;i<=n;i++) cn[i]=__builtin_popcount(i); for (int i=1;i<=n;i++) pref[i]=pref[i-1]+cn[i]; vector<int>ans; int R=n; while (n>0){ R=lower_bound(pref+1,pref+R+1,n)-pref; ans.push_back(R); n-=cn[R--]; } cout<<ans.size()<<endl; for (int i:ans) cout<<i<<" "; cout<<endl; // for (int j=0;j+1<ans.size();j++){ // if (ans[j]-1!=ans[j+1]) exit(1); // } return 0; } |
English