1 条题解
-
0
题解
若起点楼层高于终点楼层,就交换起终点,以下设 。最优路线可以始终向上走,因此竖直移动的总代价固定为 ,真正需要最小化的是经过连廊的次数。同一栋楼内相交的电梯区间可以先合并;此后若当前最高能到达 层,下一次换楼可以进入任意左端点不超过 的电梯。显然应选择其中右端点最高的一部,因为它到达的楼层不低于其他选择,之后能接上的电梯也只会更多。于是问题变成不断用一次连廊把“当前最高楼层”尽量向上推进。
将所有合并区间按左端点排序,并维护每个前缀中右端点最大的区间,就能通过二分求出任意区间再换一次楼后最远能到哪里;对这个跳转建立倍增表即可快速跨过一长串电梯。回答询问时,先找到起点楼栋中覆盖 的区间和终点楼栋中覆盖 的区间:起点区间可以免费乘到顶端,终点区间只要求中途到达它的底端,最后再走一次连廊进入;若端点没有被本楼电梯覆盖,则相应地从原楼层开始或必须推进到终点楼层。若起终点位于同一合并区间,答案直接是 ;否则用倍增求最少跳转次数,无法继续提高高度时输出 ,能到达时把连廊次数加到 上。预处理复杂度为 ,每个询问为 ,空间复杂度为 。
- 1
信息
- ID
- 1201
- 时间
- 5000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者