1 条题解

  • 0
    @ 2026-8-30 10:58:47

    奇偶子序列题解

    思路

    固定一个候选上界 xx。原问题可以转化为判定:能否选出长度至少为 kk 的子序列,使其奇数位置全部不超过 xx,或者使其偶数位置全部不超过 xx。

    分别考虑这两种位置。扫描原数组并维护已经选出的元素个数。当下一个子序列位置受到限制时,只能选择不超过 xx 的元素;当它不受限制时,直接选择当前元素总不会变差。这个贪心会尽可能早地完成每一次选择,因此若它不能得到 kk 个元素,任何其他选择也不能得到。

    可行性关于 xx 单调:某个 xx 可行时,更大的值也一定可行。因此可以二分最小可行值。

    做法

    写一个判定过程,参数表示受限制的是奇数位置还是偶数位置。顺序扫描数组;若下一个位置不受限制,直接计入,否则仅在当前值不超过 xx 时计入。任一模式最终计数达到 kk,就说明 xx 可行。

    在 [1,109][1,10^9] 上二分。若中点可行就收缩右端点,否则提高左端点,最终得到最小代价。

    贪心正确性可由交换论证得到:在扫描到任意前缀后,贪心选出的同样数量元素的末尾位置不晚于任意合法方案。对于不受限制的位置,立即选择显然最早;对于受限制的位置,选择遇到的第一个合法元素同样最早。归纳后,贪心能选出的元素数不会少于任何合法方案。

    复杂度

    每次判定扫描数组两遍,时间复杂度为 O(n)O(n),二分次数为 O(log⁡109)O(\log 10^9),总时间复杂度为 O(nlog⁡109)O(n\log 10^9)。除输入数组外只使用常数额外空间,总空间复杂度为 O(n)O(n)。

    • 1

    信息

    ID
    1184
    时间
    2000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    0
    上传者