13831. 珅泽教育CSP-J第一轮模拟考第十八套 第 36 题
珅泽教育CSP-J第一轮模拟考第十八套 第 36 题
完善程序(1):第 k 小子段和
给定一个长度为 、由正整数组成的序列 ,共有 个子段。程序中 s 为前缀和数组。请补全程序,使 solve 返回所有子段和中的第 小值。回答第 36—39 题。
using i64 = long long;
i64 s[100005];
bool check(int n, int k, i64 mid)
{
i64 cnt = 0;
for (int l = 1, r = 1; r <= n; ++r) {
while (l <= r && ____(1)____) l++;
cnt += ____(2)____;
}
return ____(3)____;
}
i64 solve(int n, int k, int a[])
{
for (int i = 1; i <= n; ++i)
s[i] = s[i - 1] + a[i];
i64 lbound = 0, rbound = 5000000000, mid;
while (lbound < rbound) {
mid = (lbound + rbound) >> 1;
if (check(n, k, mid))
rbound = ____(4)____;
else
lbound = ____(5)____;
}
return lbound;
}
(1)处应填( )。
{{ select(1) }}
s[1] > mids[r] > mids[r] - s[l-1] > mids[r] - s[l] > mid