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
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
vector <int> res;
int main(){
    ios_base :: sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int n; cin >> n;
    int start = 0,sum = 0;
    for(int i = 1; i <= n; i++){
        sum += __builtin_popcount(i);
        if(sum >= n){
            start = i;
        }
    }
    for(int i = start; i >= 1; i--){
        if(sum - __builtin_popcount(i) >= n){
            sum -= __builtin_popcount(i);
            continue;
        }
        else{
            sum -= __builtin_popcount(i);
            n -= __builtin_popcount(i);
            res.push_back(i);
            
        }
    }
    cout << res.size() << "\n";
    for(auto i : res)
        cout << i << " ";
    cout << "\n";
}