#include <bits/stdc++.h> using namespace std; int pref[1000011]; int main() { int n; scanf("%d", &n); pref[0]=-1; int size=1; int real_size=0; int counter=0; while(counter < n) { pref[size]=1; real_size++; counter+=1; for(int i=size+1; i<2*size; i++) { pref[i]=pref[i-size]+1; real_size++; counter+=pref[i]; if(counter >= n) break; } size*=2; } // for(int i=1; i<=real_size; ++i) printf("%d ",pref[i]); // printf("\n"); for(int i=2; i<=real_size; ++i) pref[i]+=pref[i-1]; // for(int i=1; i<=real_size; ++i) printf("%d ",pref[i]); // printf("\n"); int i=1; while(pref[i]<n) i++; // printf("%d\n",i); int nn=n; int len=0; while( nn > 0 ) { len++; nn-=(pref[i]-pref[i-1]); if(nn < 1) break; while(true){ --i; if(pref[i-1]<nn) break; } } printf("%d\n",len); i=1; while(pref[i]<n) i++; // printf("%d\n",i); while( n > 0 ) { printf("%d ",i); n-=(pref[i]-pref[i-1]); if(n < 1) break; while(true){ --i; if(pref[i-1]<n) break; } } printf("\n"); 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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | #include <bits/stdc++.h> using namespace std; int pref[1000011]; int main() { int n; scanf("%d", &n); pref[0]=-1; int size=1; int real_size=0; int counter=0; while(counter < n) { pref[size]=1; real_size++; counter+=1; for(int i=size+1; i<2*size; i++) { pref[i]=pref[i-size]+1; real_size++; counter+=pref[i]; if(counter >= n) break; } size*=2; } // for(int i=1; i<=real_size; ++i) printf("%d ",pref[i]); // printf("\n"); for(int i=2; i<=real_size; ++i) pref[i]+=pref[i-1]; // for(int i=1; i<=real_size; ++i) printf("%d ",pref[i]); // printf("\n"); int i=1; while(pref[i]<n) i++; // printf("%d\n",i); int nn=n; int len=0; while( nn > 0 ) { len++; nn-=(pref[i]-pref[i-1]); if(nn < 1) break; while(true){ --i; if(pref[i-1]<nn) break; } } printf("%d\n",len); i=1; while(pref[i]<n) i++; // printf("%d\n",i); while( n > 0 ) { printf("%d ",i); n-=(pref[i]-pref[i-1]); if(n < 1) break; while(true){ --i; if(pref[i-1]<n) break; } } printf("\n"); return 0; } |