数学
#include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #include<vector> using namespace std; int m; int main() { scanf("%d",&m); int k; for(k=0;(1<<k)<=m+1;k++); k--; if(m+1==(1<<k)){ printf("%d ",k); for(int i=0;i<k;i++){ printf("%d ",1<<i); } } else{ int t=m-(1<<k)+1; vector<int> vs; vs.push_back(t); for(int i=0;i<k;i++){ vs.push_back(1<<i); } sort(vs.begin(),vs.end()); for(int i=0;i<vs.size();i++){ if(vs[i]==vs[i-1]){ vs[i]++,vs[i-1]--; } } printf("%d ",k+1); for(int i=0;i<vs.size();i++){ printf("%d ",vs[i]); } } return 0; }