Guest User

c.cpp

a guest
Feb 14th, 2026
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.31 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define f first
  3. #define s second
  4. #define ll long long
  5. #define pb push_back
  6. #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
  7. #define mk make_pair
  8. using namespace std;
  9.  
  10. const int MAXN = 1e5 + 5;
  11. const ll INF = 1e18 + 7;
  12. int a[MAXN];
  13. map <ll, ll> ma, count_one;
  14. ll cnt(ll x){
  15.     if (ma[x] != 0){
  16.         return ma[x];
  17.     }
  18.     if (x <= 1){
  19.         return 1;
  20.     }
  21.     ma[x] = cnt(x / 2) * 2 + 1;
  22.     return ma[x];
  23. }
  24. ll count_digit_one(ll x){
  25.     if (count_one[x] != 0){
  26.         return count_one[x];
  27.     }
  28.     if (x <= 1){
  29.         return x;
  30.     }
  31.     count_one[x] = count_digit_one(x / 2) * 2 + x % 2;
  32.     return count_one[x];
  33. }
  34. ll posk(ll x, ll k){
  35.     if (k == 0){
  36.         return 0;
  37.     }
  38.   //  cout << cnt(x / 2) << ' ' << x << ' ' << k << "\n";
  39.     if (x <= 1){
  40.         return x;
  41.     }
  42.     if (cnt(x / 2) >= k){
  43.         return posk(x / 2, k);
  44.     }
  45.     ll ans = count_digit_one(x / 2);
  46.     k -= cnt(x / 2);
  47.     if (k == 1){
  48.         return ans + (x % 2);
  49.     }
  50.     ans += x % 2;
  51.     k--;
  52.     return ans + posk(x / 2, k);
  53. }
  54.  
  55. int main() {
  56.     IOS;
  57.     ll n, l, r;
  58.     cin >> n >> l >> r;
  59.     //cout << count_digit_one(2) << endl;
  60.     cout << posk(n, r) - posk(n, l - 1);
  61. }
  62. /*
  63.   10
  64.    5 0 5
  65.   2 1 2 0 2 1 2
  66.   1 0 1 1 1 0 1 0 1 0 1 1 1 0 1
  67. */
  68.  
Advertisement
Add Comment
Please, Sign In to add comment