13834. 珅泽教育CSP-J第一轮模拟考第十八套 第 39 题

珅泽教育CSP-J第一轮模拟考第十八套 第 39 题

完善程序(1):第 k 小子段和

给定一个长度为 nn、由正整数组成的序列 a1,a2,…,ana_1,a_2,\ldots,a_n,共有 n(n+1)2\frac{n(n+1)}2 个子段。程序中 s 为前缀和数组。请补全程序,使 solve 返回所有子段和中的第 kk 小值。回答第 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;
}

(4)和(5)处应填( )。

{{ select(1) }}

  • mid、mid + 1
  • mid - 1、mid
  • mid - 1、mid + 1
  • mid、mid