Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
34672 | 23级逯一鸣 | 【S】T1 | C++ | 通过 | 100 | 0 MS | 256 KB | 903 | 2024-11-12 15:21:25 |
#include <cmath> #include <iostream> using namespace std; using i64 = long long; constexpr int MOD = 1e9 + 7, INV_2 = 500000004; inline int add(int x, int y) { return ((i64)(MOD << 1) + x + y) % MOD; } inline int mul(i64 x, i64 y) { return (x % MOD) * (y % MOD) % MOD; } inline int halve(int x) { return mul(x, INV_2); } inline int sum(i64 l, i64 r) { return halve(mul(r + l, r - l + 1)); } int pref_sum(i64 x) { if (x == 0) return 0; int root = sqrt(x), sign = root & 1 ? 1 : -1; i64 l = (i64)root * root, r = (i64)(root + 1) * (root + 1) - 1, mid = (l + r) >> 1; if (x <= mid) return sum(l, x) * sign; else return add(sum(l, mid) * sign, sum(mid + 1, x) * -sign); } int main() { i64 l, r; cin >> l >> r; cout << add(pref_sum(r), -pref_sum(l - 1)) << '\n'; return 0; }