1 条题解

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

    CJBS02|闭区间数量统计 题解

    核心算法

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

    思路推导

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

    正确性说明

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

    复杂度

    • 每次询问:O(log⁡n)O(\log n);
    • 总时间:O(qlog⁡n)O(q\log n);
    • 额外空间:O(1)O(1)。

    易错点

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

    信息

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