1 条题解

  • 0
    @ 2026-8-30 15:41:08

    题解

    若起点楼层高于终点楼层,就交换起终点,以下设 Y<WY<W。最优路线可以始终向上走,因此竖直移动的总代价固定为 W−YW-Y,真正需要最小化的是经过连廊的次数。同一栋楼内相交的电梯区间可以先合并;此后若当前最高能到达 hh 层,下一次换楼可以进入任意左端点不超过 hh 的电梯。显然应选择其中右端点最高的一部,因为它到达的楼层不低于其他选择,之后能接上的电梯也只会更多。于是问题变成不断用一次连廊把“当前最高楼层”尽量向上推进。

    将所有合并区间按左端点排序,并维护每个前缀中右端点最大的区间,就能通过二分求出任意区间再换一次楼后最远能到哪里;对这个跳转建立倍增表即可快速跨过一长串电梯。回答询问时,先找到起点楼栋中覆盖 YY 的区间和终点楼栋中覆盖 WW 的区间:起点区间可以免费乘到顶端,终点区间只要求中途到达它的底端,最后再走一次连廊进入;若端点没有被本楼电梯覆盖,则相应地从原楼层开始或必须推进到终点楼层。若起终点位于同一合并区间,答案直接是 W−YW-Y;否则用倍增求最少跳转次数,无法继续提高高度时输出 −1-1,能到达时把连廊次数加到 W−YW-Y 上。预处理复杂度为 O(Mlog⁡M)O(M\log M),每个询问为 O(log⁡M)O(\log M),空间复杂度为 O(Mlog⁡M+N)O(M\log M+N)。

    • 1

    信息

    ID
    1201
    时间
    5000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者