1 条题解
-
0
题解
思路
对固定询问 ,若当前已经能够到达的最高位置为 ,那么区间 上每个高度都可通过向下移动到达。于是,所有满足 且 的绳索都可以使用。不断用这些绳索扩张 ,直到不再变化,即得到答案。
做法
子任务 1 可对每次询问反复扫描全部绳索。每当 增大后重新扫描,直到达到不动点。其时间复杂度为 。
子任务 2 可以把询问按上界 离线。令 表示只允许使用上端不超过当前扫描高度的绳索时,从 出发可到达的最高位置。初始 。当扫描到唯一一根上端为 、下端为 的绳索时,恰好需要对所有 且 的位置执行 。直接扫描 即可,总复杂度 。
满分做法仍按 从小到大扫描,但用线段树维护数组 。线段树结点记录区间最大值和严格次大值。对于一次修改,在目标前缀中:若最大值小于 ,整段没有位置需要修改;若严格次大值小于 ,只有所有最大值位置满足条件,可以把这些最大值整体改为 ;否则递归到两个儿子。询问是单点查询。
正确性来自离线不变量:处理完所有上端不超过 的绳索后, 等于询问 的答案。加入绳索 时,从 能使用它当且仅当 且此前 ;而 是当前新出现的最大上端,所以使用后答案恰为 。线段树修改与这一条件逐点完全等价,因此归纳成立。
复杂度
复杂度方面,每次递归到不能整段处理的位置时,会合并至少两个不同的区间最大值;可用不同值块的数量作为势能。所有修改总计 ,所有单点查询总计 ,空间复杂度 。
- 1
信息
- ID
- 1489
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者