class Solution:
def minimumPossibleSum(self, n: int, target: int) -> int:
mod = 10**9 + 7
m = target // 2 # 前面部分的 项数
if n <= m:
return ((1 + n) * n // 2) % mod
# 后面 由于从1 开始, target 及 超过 target 的部分 均满足求和要求。
# target, target + 1, target + 2 .. target + (n - m - 1)
# 求和 (target + (target + (n -m - 1))) * (n - m) // 2
# 前面部分, 1, 2, 3, ..., target//2 。 贪心,后面 target - i 显然更大。为求和最小,取前面部分
return ( (1 + m) * m // 2 + (target * 2 + (n - m - 1)) * (n - m) // 2 ) % mod
class Solution {
public:
int minimumPossibleSum(int n, int target) {
long long m = min(target / 2, n);
return (m * (m + 1) + (n - m - 1 + target * 2) * (n - m)) / 2 % 1'000'000'007;
}
};