1 条题解

  • 0
    @ 2026-8-10 13:50:07

    CJBS02|闭区间数量统计 题解

    核心算法

    lower_bound 找到第一个不小于 LL 的位置,用 upper_bound 找到第一个大于 RR 的位置,两位置之差就是答案。

    思路推导

    闭区间左边界要保留等于 LL 的元素,所以找“第一个 L\ge L”;右边界要越过所有等于 RR 的元素,所以找“第一个 >R>R”。

    正确性说明

    left 是第一个 aiLa_i\ge L 的下标,right 是第一个 ai>Ra_i>R 的下标。由于数组有序,恰好只有半开区间 [left,right) 内的元素同时满足 aiLa_i\ge LaiRa_i\le R,数量为 right-left

    复杂度

    • 每次询问:O(logn)O(\log n)
    • 总时间:O(qlogn)O(q\log n)
    • 额外空间:O(1)O(1)

    易错点

    • 闭区间右端必须使用“第一个大于 RR”,不能找第一个不小于 RR
    • 区间内可能没有元素,答案应为 0
    • 重复值必须全部计入;
    • 不要使用 R+1R+1 代替 upper_bound,因为这会引入边界溢出风险。
    • 1

    信息

    ID
    CJBS02
    时间
    2000ms
    内存
    256MiB
    标签
    递交数
    5
    已通过
    2
    上传者