lina_os

Untitled

Jul 14th, 2025
14
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.99 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define ll long long
  4. #define ul unsigned long long
  5. #define ld long double
  6. //#define vll(v) vector<ll>v;
  7. #define vll(v,n) vector<ll>v(n);
  8. #define mll(m) map<ll,ll>m;
  9. #define sll(s) set<ll>s;
  10. #define iv for(auto &i:v) cin >> v;
  11. #define ov for(auto &i:v) cout << v << " ";
  12. #define Bismillah ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
  13.  
  14. using namespace std;
  15.  
  16. ll mod=1e9+7;
  17.  
  18. ll add(ll a, ll b) {
  19.     return ((a%mod) + (b%mod)) %mod;
  20. }
  21.  
  22. ll mul(ll a, ll b) {
  23.     return ((a%mod) * (b%mod)) %mod;
  24. }
  25.  
  26. ll sub(ll a, ll b) {
  27.     return (((a - b) % mod)+mod)%mod;
  28. }
  29.  
  30. ll sum(ll x) {
  31.     ll y=x;
  32.     x++; x/=2;
  33.     ll p=log2(x);
  34.     ll ans=0;
  35.     if (p==0) ans++;
  36.     else if (p&&p%2) {
  37.         ll n=0;
  38.         for (int i=1; i<=p; i+=2){
  39.             n=add(n,(1<<i)); //n+= 1<<i;
  40.         }
  41.         ans=add(ans,mul(n,n+1)); //ans+=n*(n+1);
  42.     }
  43.     else if (p) {
  44.         ll n=0;
  45.         for (int i=1; i<=p; i+=2){
  46.             n=add(n,(1<<i)); //n+= 1<<i;
  47.         }
  48.         n=mul(n,2); n=add(n,1); //n*=2; n++;
  49.         ans=add(mul(n,n),ans); //ans+=n*n;
  50.     }
  51.     ll ex=sub(y,(mul((1<<p),2)-1)); //ex=y-((1<<p)*2-1);
  52.     p=sub(p,1); //p--;
  53.     if (p==0) ans=add(ans,mul(1+ex,1+ex)); //ans+=(1+ex)*(1+ex);
  54.     else if (p&&p%2) {
  55.         ll n=0;
  56.         for (int i=1; i<=p; i+=2){
  57.             n=add(n,(1<<i)); //n+= 1<<i;
  58.         }
  59.         n=add(n,ex); //n+=ex;
  60.         ans=add(ans,mul(n,n+1)); //ans+=n*(n+1);
  61.     }
  62.     else if (p) {
  63.         ll n=0;
  64.         for (int i=1; i<=p; i+=2){
  65.             n=add(n,(1<<i)); //n+= 1<<i;
  66.         }
  67.         n=mul(n,2); n=add(n,1); //n*=2; n++;
  68.         n=add(n,ex); //n+=ex;
  69.         ans=add(mul(n,n),ans); //ans+=n*n;
  70.     }
  71.     return ans;
  72. }
  73.  
  74. void solve() {
  75.     ll l,r;
  76.     cin >> l >> r;
  77.     if (l>r) swap(l,r);
  78.     cout << sub(sum(r),((l>1)? sum(l-1) :0)) << endl;
  79. }
  80.  
  81. int main() {
  82.     Bismillah
  83.     ll t=1;
  84. //    cin >> t;
  85.     while (t--) {
  86.         solve();
  87.     }
  88.     return 0;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment