1 条题解
-
0
题目大意
有 棵高度互不相同的植物排成一个圆圈,按顺时针编号为 到 。对于每棵植物 ,我们知道在它顺时针方向的后 棵植物中,有多少棵比它高(记为 )。
需要回答 个查询:对于植物 和 ,判断是否一定能确定它们的高度关系。
解题思路
关键观察
-
约束条件分析:每个 实际上给出了一个局部约束。对于植物 ,在区间 (模 意义下)中,恰好有 棵植物比 高, 棵植物比 矮。
-
图论建模:我们可以将高度关系建模为有向图,如果已知 比 高,则添加边 。
-
确定性判断:如果从 到 存在路径,则 一定比 高;如果从 到 存在路径,则 一定比 矮;否则无法确定。
算法步骤
步骤1:重建高度序列
我们需要从 数组还原出一个可能的高度序列,这通过拓扑排序实现:
- 维护每个位置当前"未知"的比较数量(初始为 )
- 当某个位置的未知比较数为 时,说明它比其后 个位置的所有植物都高,可以确定其相对高度
- 使用线段树维护区间最小值,快速找到可确定的位置
步骤2:构建比较图
根据重建的高度序列,我们可以推断出一些确定的高度关系:
- 如果 且 在 的后 个位置内,则 比 高
- 使用倍增表 (
nt和pv) 来快速判断两个位置之间是否存在确定的高度关系链
步骤3:回答查询
对于查询
compare_plants(x, y):- 如果 ,则考虑 是否一定比 高
- 检查是否存在从 到 的路径(考虑环形结构)
- 如果存在,返回 ;如果存在从 到 的路径,返回 ;否则返回
时间复杂度
- 初始化:
- 每次查询:
- 总复杂度:
-
- 1
信息
- ID
- 4550
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 20
- 已通过
- 1
- 上传者