1 条题解

  • 0
    @ 2026-9-9 9:21:03

    题解

    思路

    把区间尽量向两端延伸不会使目标变差,因此可令每个左端点形如 xi+1x_i+1,每个右端点形如 xi+1−1x_{i+1}-1,并补上 x0=−∞,xN+1=+∞,y0=yN+1=0x_0=-\infty,x_{N+1}=+\infty,y_0=y_{N+1}=0。

    做法

    记 ci=yi+1−yic_i=y_{i+1}-y_i:若 ci>0c_i>0,就在 xi+1x_i+1 处加入 cic_i 个左端点;若 ci<0c_i<0,就在 xi+1−1x_{i+1}-1 处加入 −ci-c_i 个右端点。按坐标分别排序后,将第 kk 个左端点与第 kk 个右端点配对是最优的,因为任何逆序配对都可以交换而不减小最短区间长度;额外同时加入一个左、右端点也不可能改善答案,所以这组最少端点已经给出最优解。

    端点重数可能达到 10910^9,不能逐个展开。按下标顺序记录值与重数形成两个压缩序列,再用双指针每次消去当前两块重数的较小值;若两端均有限,就用右端点减左端点更新最小值。若所有配对都含无穷端点,则区间长度可以无限增大,答案为 −1-1。

    复杂度

    每个压缩块只被访问一次,时间复杂度为 O(N)O(N),空间复杂度为 O(N)O(N)。

    • 1

    信息

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