#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int MAXN = 1e6 + 5;
#define lowbit(x) ((x)&-(x))
int a[MAXN], sum[MAXN];
int main(void)
{
int n;
scanf("%d",&n);
for(int i=1; i<=n; ++i)
{
a[i] = a[i ^ lowbit(i)] + 1;
sum[i] = sum[i-1] + a[i];
}
int pos = n;
vector<int> ans;
while(n)
{
while(sum[pos-1] >= n) --pos;
ans.emplace_back(pos);
n -= a[pos]; --pos;
}
printf("%d\n",(int)ans.size());
for(int t: ans)
printf("%d ",t);
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 | #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pii; const int MAXN = 1e6 + 5; #define lowbit(x) ((x)&-(x)) int a[MAXN], sum[MAXN]; int main(void) { int n; scanf("%d",&n); for(int i=1; i<=n; ++i) { a[i] = a[i ^ lowbit(i)] + 1; sum[i] = sum[i-1] + a[i]; } int pos = n; vector<int> ans; while(n) { while(sum[pos-1] >= n) --pos; ans.emplace_back(pos); n -= a[pos]; --pos; } printf("%d\n",(int)ans.size()); for(int t: ans) printf("%d ",t); return 0; } |
English