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
#include <bits/stdc++.h>
using namespace std;
bool czy[1000007];
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n; cin >> n;
    int maxx = 0;
    int aktual = 0;
    int iter = 0;
    int ile = 0;
    while (true){
        if (aktual >= n){
            break;
        }
        iter++;
        ile++;
        czy[iter] = true;
        maxx = max(iter, maxx);
        aktual += __builtin_popcount(iter);
    }
    for (int i = iter; i >= 1; --i){
        if (aktual - __builtin_popcount(i) >= n){
            ile--;
            aktual -= __builtin_popcount(i);
            maxx = max(i, maxx);
            czy[i] = false;
        }
        if (aktual == n){
            break;
        }
    }
    cout << ile << "\n";
    for (int i = maxx; i >= 1; --i){
        if (czy[i] == true){
            cout << i << " ";
        }
    }
}