70求助
  • 板块学术版
  • 楼主封禁用户
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/21 18:36
  • 上次更新2024/10/21 20:11:00
查看原帖
70求助
998963
封禁用户楼主2024/10/21 18:36

题目

#include <iostream>
using namespace std;
typedef long long ll;

inline int read()
{
	int x = 0, f = 1;
	char ch = getchar();
	while (ch < '0' || ch > '9')
	{
		if (ch == '-') f = -1;
		ch = getchar();
	}
	while (ch >= '0' && ch <= '9')
	{
		x = x * 10 + ch - '0';
		ch = getchar();
	}
	return x * f;
}

ll f(ll n)
{
	return n * (n + 1) / 2;
}

ll g(ll n)
{
	return n * (n + 1) * (n + 2) / 6;
}

ll find(ll n)
{
	int l = 0, r = 1e9, ans = 0;
	while (l <= r)
	{
		int mid = (l + r) / 2;
		if (f(mid) >= n)
		{
			r = mid - 1;
			ans = mid;
		}
		else l = mid + 1;
	}
	return ans;
}

int main()
{
	int t = read();
	while (t --)
	{
		ll l = read(), r = read();
		ll getl = l - f(find(l) - 1);
		ll getr = r - f(find(r) - 1);
		ll ansl = g(find(l) - 1) + f(getl - 1);
		ll ansr = g(find(r) - 1) + f(getr);
		cout << ansr - ansl << endl;
	}
	return 0;
}
2024/10/21 18:36
加载中...