1 条题解

  • 0
    @ 2026-8-19 8:13:23

    区间分组题解

    思路

    考虑任意一个坐标,同时覆盖该坐标的所有闭区间两两相交,因此它们必须被分到不同组。于是最少分组数至少是任意坐标处覆盖区间数量的最大值。

    反过来,按左端点从小到大处理区间,并优先复用右端点最小且已经与当前区间分离的组。如果没有组可复用,那么所有已有组的最后一个区间都覆盖当前左端点,新区间与它们同时相交,确实必须新建一组。因此所需组数恰好等于最大同时覆盖数量。

    题目只要求输出组数,所以直接统计每个坐标处有多少个闭区间覆盖即可。

    做法

    对每个闭区间 [L,R][L,R],在差分数组的 LL 处加一,在 R+1R+1 处减一。按坐标从小到大求前缀和,前缀和就是当前坐标被多少个区间覆盖。所有前缀和的最大值即为答案。

    使用 R+1R+1 而不是 RR 进行减法,保证两个只在端点相交的闭区间会在该端点同时计入。

    正确性证明

    设最大同时覆盖数量为 DD。在达到该数量的坐标上,有 DD 个区间两两相交,它们不可能位于同一组,所以任何方案至少需要 DD 组。

    按左端点顺序进行贪心分组。处理新区间时,若某组最后区间的右端点严格小于当前左端点,则可复用该组;否则必须新建一组。每次新建第 kk 组时,前 k1k-1 组最后的区间右端点都不小于当前左端点,而它们的左端点都不大于当前左端点,因此这些区间与当前区间共同覆盖当前左端点。此时至少有 kk 个区间同时覆盖一点,所以 kDk\le D。故存在只用 DD 组的方案。

    结合上下界,最少分组数等于 DD。差分前缀和准确统计每个坐标的覆盖数量,因此算法输出正确。

    复杂度

    设坐标上界为 V=2×105V=2\times 10^5。时间复杂度为 O(n+V)O(n+V),空间复杂度为 O(V)O(V)

    • 1

    信息

    ID
    883
    时间
    2000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者