题干信息解读
在一条由 N 块瓷砖组成的路径上,每块瓷砖 iii 覆盖着 fif_ifi 英尺的积雪。JohnJohnJohn 有 BBB 双靴子,每双靴子 iii 有最大承受积雪深度 sis_isi 和最大步长 did_idi 。JohnJohnJohn 必须从第 111 块瓷砖出发,到达第 N 块瓷砖,且两块瓷砖无积雪。需要判断每双靴子是否能让 JohnJohnJohn 完成这段旅程。
整体做题思路
1.离线处理:将靴子按最大承受积雪深度降序排序,同时记录原始索引。
2.维护可达性:使用并查集维护当前可到达的连续区间,初始时每个瓷砖自成一个集合。
3.处理瓷砖:按积雪深度降序处理每个瓷砖,将其加入并查集,并合并相邻的区间。
4.查询靴子:对于每双靴子,检查其最大步长是否能跨越当前所有不可达区间的最大长度。
难点和注意事项
1.离线处理:需将靴子按 s_i 排序,以便逐步处理积雪深度的限制。
2.并查集维护:合并区间时需动态更新区间长度,确保高效查询最大区间长度。
3.边界处理:处理瓷砖合并时需注意边界条件,避免数组越界。
AC代码(如有雷同,纯属巧合)(改编自@狂火·维列)
复杂度分析
时间复杂度:排序操作 O(NlogN+BlogB)O (N log N + B log B)O(NlogN+BlogB),处理每个瓷砖和靴子的操作近似 O(N+B)O (N + B)O(N+B),总时间复杂度 O(NlogN+BlogB)O (N log N + B log B)O(NlogN+BlogB)。
空间复杂度:主要用于存储瓷砖、靴子和并查集,空间复杂度 O(N+B)O (N + B)O(N+B)。