提交时间:2024-11-12 16:16:28

运行 ID: 34693

#include<bits/stdc++.h> using namespace std; long long l,r; long long ans=0; const int mod=1e9+7; int main(){ cin>>l>>r; l=l-1; long long e=1; long long z=3,k=1; long long l1=l; long long l2=0; while(l>=z){ l-=z; l2+=z; z+=2; k++; } z/=2; if(k%2==1){ if(l1<=z+1+l2) ans-=(((l2+1+l1)%mod)*(l1-l2)%mod*500000004%mod+mod)%mod; else{ ans-=(((l2+1+l2+z+1)%mod)*(z+1)%mod*500000004%mod+mod)%mod; ans+=(((l2+z+2+l1)%mod)*(l1-l2-z-1)%mod*500000004%mod+mod)%mod; } ans=(ans+mod)%mod; /*for(int i=l2+1;i<=l1;i++){ if(i-l2<=z+1) ans-=i; else ans+=i; ans=(ans+mod)%mod; }*/ } else{ if(l1<=z+1+l2) ans+=(((l2+1+l1)%mod)*(l1-l2)%mod*500000004%mod+mod)%mod; else{ ans+=(((l2+1+l2+z+1)%mod)*(z+1)%mod*500000004%mod+mod)%mod; ans-=(((l2+z+2+l1)%mod)*(l1-l2-z-1)%mod*500000004%mod+mod)%mod; } ans=(ans+mod)%mod; /*for(int i=l2+1;i<=l1;i++){ if(i-l2<=z+1) ans+=i; else ans-=i; ans=(ans+mod)%mod; }*/ } //cout<<(((l2+1+l1)%mod)*(l1-l2)*500000004%mod+mod)%mod<<" "<<(l2+1+l1)%mod*(l1-l2)<<" "<<ans<<" "; z=3,k=1; l1=r; l2=0; while(r>=z){ r-=z; l2+=z; z+=2; k++; } z/=2; if(k%2==1){ if(l1<=z+1+l2) ans+=(((l2+1+l1)%mod)*(l1-l2)%mod*500000004%mod+mod)%mod; else{ ans+=(((l2+1+l2+z+1)%mod)*(z+1)%mod*500000004%mod+mod)%mod; ans-=(((l2+z+2+l1)%mod)*(l1-l2-z-1)%mod*500000004%mod+mod)%mod; } ans=(ans+mod)%mod; /*for(int i=l2+1;i<=l1;i++){ if(i-l2<=z+1) ans+=i; else ans-=i; ans=(ans+mod)%mod; }*/ } else{ if(l1<=z+1+l2) ans-=(((l2+1+l1)%mod)*(l1-l2)%mod*500000004%mod+mod)%mod; else{ ans-=(((l2+1+l2+z+1)%mod)*(z+1)%mod*500000004%mod+mod)%mod; ans+=(((l2+z+2+l1)%mod)*(l1-l2-z-1)%mod*500000004%mod+mod)%mod; } ans=(ans+mod)%mod; /*for(int i=l2+1;i<=l1;i++){ if(i-l2<=z+1) ans-=i; else ans+=i; ans=(ans+mod)%mod; }*/ } cout<<ans<<endl; }