哪位大佬能帮忙看看这个代码哪儿有问题,后面三个点全部RE了
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
int t;
ll l, r;
ll s[3000000];
ll search(ll n)
{
ll l, r;
l = 1, r = 290000;
while (l < r)
{
ll mid = l + r >> 1;
if (mid * (mid + 1) >= 2 * n) r = mid;
else l = mid + 1;
}
return l;
}
int main()
{
for (int i = 1; i < 2900000; i++)s[i] = s[i - 1] + i;
scanf("%d", &t);
while (t--)
{
ll sum = 0;
scanf("%lld%lld", &l, &r);
ll m, n;
m = search(l);
n = search(r);
//printf("%d %d", m, n);
if (m != n)
{
sum += (n * (n - 1) * (n + 1) / 6 - m * (m + 1) * (m + 2) / 6);//n+1到m-1的前缀和
sum += (s[m] - s[l - (m - 1) * m / 2 - 1]);
sum += (s[r - (n - 1) * n / 2]);
}
else sum = (s[r - (m - 1) * m / 2] - s[l - (m - 1) * m / 2 - 1]);
printf("%lld\n", sum);
}
return 0;
}