#include <bits/stdc++.h>
using namespace std;
const int MX=1100100;
int n,le,ri,mid,i,b[MX],c[MX];
vector<int> ans;
int main() {
scanf("%d",&n);
for (i=1; i<=n; i++) {
b[i]=b[i/2]+(i&1);
c[i]=c[i-1]+b[i];
}
while (n>0) {
le=1; ri=n;
while (le<ri) {
mid=(le+ri)/2;
if (c[mid]>=n) ri=mid; else le=mid+1;
}
ans.push_back(ri);
n-=b[ri];
}
printf("%d\n",int(ans.size()));
for (int x: ans) printf("%d ",x);
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 | #include <bits/stdc++.h> using namespace std; const int MX=1100100; int n,le,ri,mid,i,b[MX],c[MX]; vector<int> ans; int main() { scanf("%d",&n); for (i=1; i<=n; i++) { b[i]=b[i/2]+(i&1); c[i]=c[i-1]+b[i]; } while (n>0) { le=1; ri=n; while (le<ri) { mid=(le+ri)/2; if (c[mid]>=n) ri=mid; else le=mid+1; } ans.push_back(ri); n-=b[ri]; } printf("%d\n",int(ans.size())); for (int x: ans) printf("%d ",x); return 0; } |
English