Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll long long
- #define ul unsigned long long
- #define ld long double
- //#define vll(v) vector<ll>v;
- #define vll(v,n) vector<ll>v(n);
- #define mll(m) map<ll,ll>m;
- #define sll(s) set<ll>s;
- #define iv for(auto &i:v) cin >> v;
- #define ov for(auto &i:v) cout << v << " ";
- #define Bismillah ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
- using namespace std;
- ll mod=1e9+7;
- ll add(ll a, ll b) {
- return ((a%mod) + (b%mod)) %mod;
- }
- ll mul(ll a, ll b) {
- return ((a%mod) * (b%mod)) %mod;
- }
- ll sub(ll a, ll b) {
- return (((a - b) % mod)+mod)%mod;
- }
- ll sum(ll x) {
- ll y=x;
- x++; x/=2;
- ll p=log2(x);
- ll ans=0;
- if (p==0) ans++;
- else if (p&&p%2) {
- ll n=0;
- for (int i=1; i<=p; i+=2){
- n=add(n,(1<<i)); //n+= 1<<i;
- }
- ans=add(ans,mul(n,n+1)); //ans+=n*(n+1);
- }
- else if (p) {
- ll n=0;
- for (int i=1; i<=p; i+=2){
- n=add(n,(1<<i)); //n+= 1<<i;
- }
- n=mul(n,2); n=add(n,1); //n*=2; n++;
- ans=add(mul(n,n),ans); //ans+=n*n;
- }
- ll ex=sub(y,(mul((1<<p),2)-1)); //ex=y-((1<<p)*2-1);
- p=sub(p,1); //p--;
- if (p==0) ans=add(ans,mul(1+ex,1+ex)); //ans+=(1+ex)*(1+ex);
- else if (p&&p%2) {
- ll n=0;
- for (int i=1; i<=p; i+=2){
- n=add(n,(1<<i)); //n+= 1<<i;
- }
- n=add(n,ex); //n+=ex;
- ans=add(ans,mul(n,n+1)); //ans+=n*(n+1);
- }
- else if (p) {
- ll n=0;
- for (int i=1; i<=p; i+=2){
- n=add(n,(1<<i)); //n+= 1<<i;
- }
- n=mul(n,2); n=add(n,1); //n*=2; n++;
- n=add(n,ex); //n+=ex;
- ans=add(mul(n,n),ans); //ans+=n*n;
- }
- return ans;
- }
- void solve() {
- ll l,r;
- cin >> l >> r;
- if (l>r) swap(l,r);
- cout << sub(sum(r),((l>1)? sum(l-1) :0)) << endl;
- }
- int main() {
- Bismillah
- ll t=1;
- // cin >> t;
- while (t--) {
- solve();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment