1 条题解
-
0
关键观察
操作的本质:
使用 max 机相当于从两张卡中选出强度更大和花费更大的属性。
使用 min 机相当于从两张卡中选出强度更小和花费更小的属性。
这提示我们,最终卡的 一定来自初始某张卡的 ,因为每次操作只是传递这些属性。
可达性条件: 经过分析可以发现,最终能得到一张卡 当且仅当:
存在初始卡 使得 且 (因为我们可以通过 min 操作来“降低”属性,但需要有一个足够高的起点)。
存在初始卡 使得 且 (因为我们可以通过 max 操作来“升高”属性,但需要有一个足够低的起点)。
并且这两张卡在合并过程中可以通过某种顺序相遇。
简化条件: 实际上,可以证明最终能得到 的充要条件是:
存在一张卡 满足 且
存在一张卡 满足 且
并且 和 在序列中满足某种位置关系(在最终的括号树中,一个在另一个的子树中,或者它们可以通过某种方式相遇)
进一步转化: 通过更深入的分析,问题可以转化为:
将所有卡按 排序后,最终能得到的 必须满足:存在某个 使得 且 ,或者类似的区间条件。
算法思路
预处理:
将初始卡按 排序。
维护一个栈,用于找到对于每个位置 ,左边第一个 值比它大的位置。
构建可达区域:
从左到右扫描,维护当前的最大 值。
对于每个位置 ,我们可以得到一个矩形区域: 与 的交集?实际上需要更精确的描述。
检查目标卡:
对于每个目标 ,检查是否存在某个 使得: 且 其中 和 是前 张卡中的最大 和最大 。
高效实现:
使用单调栈预处理
对于每个查询,可以使用二分查找来快速判断
时间复杂度
排序:
单调栈预处理:
查询处理:
总复杂度:,可以处理 的数据规模。
- 1
信息
- ID
- 5003
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者