Advertisement
welleyth

783. F

Jan 9th, 2023
835
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.20 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <ext/pb_ds/assoc_container.hpp>
  3. #include <ext/pb_ds/tree_policy.hpp>
  4.  
  5. using namespace std;
  6. using namespace __gnu_pbds;
  7.  
  8. #define int long long
  9. #define mp make_pair
  10. #define pb push_back
  11.  
  12. #pragma GCC optimize("Ofast")
  13. #pragma GCC optimize("unroll-loops")
  14. #pragma GCC target("avx2")
  15.  
  16. typedef long long ll;
  17.  
  18. constexpr int N = (int)5e5 + 111;
  19. constexpr ll INF = (ll)1e18;
  20. constexpr int md = (int)1e9+7;
  21.  
  22. void add(int& a,int b){
  23.     a = a + b;
  24. //    a = (a+b >= md ? a+b-md : a+b);
  25. }
  26. void sub(ll& a,ll b){
  27.     a = (a-b < 0 ? a-b+md : a-b);
  28. }
  29.  
  30. mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
  31.  
  32. int bpow(int a,int b){
  33.     if(b == 0)
  34.         return 1;
  35.     if(b % 2 == 0){
  36.         int t = bpow(a,b>>1);
  37.         return t * t % md;
  38.     }
  39.     return a * bpow(a,b-1) % md;
  40. }
  41.  
  42. void solve(){
  43.     int n;
  44.     cin >> n;
  45.  
  46.     int l,r;
  47.     cin >> l >> r;
  48.  
  49.     int ans = 0;
  50.     int dp[2][60][2][2];
  51.     bool Set = false;
  52.  
  53.     for(int first = 59; first >= 0; first--){
  54.         if((1ll << first) > n)
  55.             continue;
  56.         memset(dp,0,sizeof dp);
  57.         dp[0][1][1][((n >> first & 1) == 0) || Set] = 1;
  58.         Set |= (n >> first & 1);
  59.         for(int j = first-1; j >= 0; j--){
  60.             for(int bt = 0; bt < 2; bt++){
  61.                 for(int len = 1; len <= r; len++){
  62.                     for(int pr = 0; pr < 2; pr++){
  63.                         for(int Less = 0; Less < 2; Less++){
  64.                             if(!Less && (n >> j & 1) < bt)
  65.                                 continue;
  66.                             if(bt != pr){
  67.                                 int nwLess = Less || ((n >> j & 1) > bt);
  68.                                 if(l <= len)
  69.                                     add(dp[1][1][bt][nwLess],dp[0][len][pr][Less]);
  70.                             } else {
  71.                                 int nwLen = len + 1;
  72.                                 int nwLess = Less || ((n >> j & 1) > bt);
  73.                                 if(nwLen <= r)
  74.                                     add(dp[1][nwLen][bt][nwLess],dp[0][len][pr][Less]);
  75.                             }
  76.                         }
  77.                     }
  78.                 }
  79.             }
  80.             for(int len = 1; len <= r; len++){
  81.                 for(int bt = 0; bt < 2; bt++){
  82.                     for(int Less = 0; Less < 2; Less++){
  83.                         dp[0][len][bt][Less] = dp[1][len][bt][Less];
  84.                         dp[1][len][bt][Less] = 0;
  85.                     }
  86.                 }
  87.             }
  88.         }
  89.         int sum = 0;
  90.         for(int len = l; len <= r; len++){
  91.             for(int bt = 0; bt < 2; bt++){
  92.                 for(int Less = 0; Less < 2; Less++){
  93.                     add(ans,dp[0][len][bt][Less]);
  94.                     add(sum,dp[0][len][bt][Less]);
  95.                 }
  96.             }
  97.         }
  98.     }
  99.  
  100.     cout << ans << "\n";
  101.  
  102.     return;
  103. }
  104.  
  105. signed main(){
  106.     ios::sync_with_stdio(false); cin.tie(nullptr);cout.tie(nullptr);
  107. //    freopen("input.txt","r",stdin);
  108. //    freopen("output.txt","w",stdout);
  109.     int tests = 1;
  110. //    cin >> tests;
  111.     for(int test = 1; test <= tests; test++){
  112.         solve();
  113.     }
  114.     return 0;
  115. }
  116. /**
  117. **/
  118.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement