Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
34598 | 22fhq | 【S】T1 | C++ | 通过 | 100 | 0 MS | 256 KB | 1077 | 2024-11-12 12:43:07 |
#include<bits/stdc++.h> using namespace std; #define int long long const int mod=1e9+7; void prt(__int128_t x){ if(x>=10)prt(x/10); putchar(x%10+'0'); } int calc(int R){ __int128_t l=0,r=1000000000,mid; while(l<r){ mid=l+r+1>>1; if(mid*mid>R)r=mid-1; else l=mid; } __int128_t y=(R-l*l<(l+1)*(l+1)-R?l:l+1); __int128_t res=0; mid=(y*y+(y+1)*(y+1))/2; if(mid>=R)res=(y*y+R)*(R-y*y+1)/2; else res=(y*y+mid)*(mid-y*y+1)/2-(R+mid+1)*(R-mid)/2; // prt(res);cout<<endl; if(y%2==0)res=-res; res%=mod; return res; } signed main(){ int L,R; cin>>L>>R; // int ans=0; // for(int i=L;i<=R;i++){ // int l=1,r=1000,mid; // while(l<r){ // mid=l+r+1>>1; // if(mid*mid>i)r=mid-1; // else l=mid; // } // int y=(i-l*l<(l+1)*(l+1)-i?l:l+1); // if(y%2==0)ans-=i; // else ans+=i; // ans%=mod; // } cout<<((calc(R)-calc(L-1))%mod+mod)%mod<<endl; return 0; }