#include<bits/stdc++.h> using namespace std; #define ll long long const int MAXX=1e6+10; ll tab[MAXX]; int wymazane[MAXX]; int main(){ int n; cin>>n; //ll w=0; for(ll i=1;i<=MAXX-10;i++){ tab[i]+=tab[i-1]+__builtin_popcount(i); } //cout<<tab[10]<<" "<<tab[7]<<" "<<tab[2]<<" "<<tab[4]; int p=0; int k=MAXX-10; while(p+1<k){ int sr=(p+k)/2; if(tab[sr]<n)p=sr; else k=sr; } //cout<<k<<" "<<tab[k]; ll w=tab[k]; int licznik=0; for(int i=k-1;i>0;i--){ if(w-__builtin_popcount(i)>=n){wymazane[i]=1; w-=__builtin_popcount(i);licznik++;} } cout<<k-licznik<<"\n"; for(int i=k;i>0;i--){ if(wymazane[i]==0){ cout<<i<<" "; } } 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; #define ll long long const int MAXX=1e6+10; ll tab[MAXX]; int wymazane[MAXX]; int main(){ int n; cin>>n; //ll w=0; for(ll i=1;i<=MAXX-10;i++){ tab[i]+=tab[i-1]+__builtin_popcount(i); } //cout<<tab[10]<<" "<<tab[7]<<" "<<tab[2]<<" "<<tab[4]; int p=0; int k=MAXX-10; while(p+1<k){ int sr=(p+k)/2; if(tab[sr]<n)p=sr; else k=sr; } //cout<<k<<" "<<tab[k]; ll w=tab[k]; int licznik=0; for(int i=k-1;i>0;i--){ if(w-__builtin_popcount(i)>=n){wymazane[i]=1; w-=__builtin_popcount(i);licznik++;} } cout<<k-licznik<<"\n"; for(int i=k;i>0;i--){ if(wymazane[i]==0){ cout<<i<<" "; } } return 0; } |