1 条题解
-
0
科尔涅耶维奇与异或(困难版)题解
思路
对每个异或值 ,维护产生 的严格递增子序列中最小的末尾元素 。空子序列令 。读到值 时,所有满足 的状态都可转移到 ,并把新状态末尾更新为 。
做法
子任务 1 枚举全部子序列并检查严格递增。
子任务 2 对每个输入元素扫描全部 个异或状态,复杂度 。
满分算法利用 。当某个 从旧值降到新值时,状态 只会新获得阈值 的转移资格,把 加入这些值的待处理表。输入出现 时只处理尚未为该 使用过的状态。每个二元组 最多处理一次。
正确性证明
若存在异或为 、末尾小于 的递增子序列,则追加当前 后得到异或 的合法子序列;反之任何以当前 结尾的合法子序列删去末项后必来自这样的状态。只保留最小末尾不会损失任何后续转移。待处理表恰在最小末尾首次低于阈值时加入状态,且每个阈值状态对只处理一次,因此优化与逐元素扫描完全等价。
复杂度
时间复杂度 ,空间复杂度 。
- 1
信息
- ID
- 1294
- 时间
- 1500ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者