OJ-Problems-Source/HDOJ/4279_autoAC.cpp

51 lines
1.1 KiB
C++

#include"iostream"
#include"cstdio"
#include"cstring"
using namespace std;
const unsigned __int64 limit=3037000498;
unsigned __int64 solve(unsigned __int64 x)
{
unsigned __int64 ans,low,mid,up,temp;
low=1;up=limit;
while(low<=up)
{
mid=(low+up)>>1;
temp=mid*mid+4*mid;
if(temp<=x) low=mid+1;
else up=mid-1;
}
low--;
ans=low*(low+1)/2 + (low/2 + low%2)*3;
temp=x-(low*low+4*low);
if(!temp) return ans;
if(temp<=(low+1)*2)
{
if((low+1)%2) ans+=temp/2 + temp%2;
else ans+=(temp-1)/2 + (temp-1)%2;
}
else
{
ans+=low+1;
if((low+1)%2) ans+=temp-(low+1)*2;
}
return ans;
}
int main()
{
int T;
unsigned __int64 a,b,ans[2];
cin>>T;
while(T--)
{
scanf("%I64u%I64u",&a,&b);
if(b<=5) {printf("0\n");continue;}
if(a<=6)a=0;
else a-=6;
b-=5;
ans[0]=solve(a);
ans[1]=solve(b);
printf("%I64u\n",ans[1]-ans[0]);
}
return 0;
}