1 条题解

  • 0
    @ 2026-8-28 1:20:54

    题解

    思路推导

    题目要求一个长度为 k+1k+1 的窗口满足 2jai+j<2j+1ai+j+12^j a_{i+j}<2^{j+1}a_{i+j+1}。约去公共因子 2j2^j 后,每一项都等价于 ai+j<2ai+j+1a_{i+j}<2a_{i+j+1}。

    因此,一个窗口合法,当且仅当它覆盖的连续 kk 对相邻元素全部满足上述不等式。问题转化为统计长度至少为 kk 的连续“好边”段所包含的长度为 kk 的小段数量。

    做法

    从左到右扫描所有相邻对。若当前相邻对满足 ai<2ai+1a_i<2a_{i+1},令当前连续好边数加一;否则清零。每当连续好边数不小于 kk,就有一个以当前位置结尾的新合法窗口,答案加一。

    比较时使用 64 位整数计算 2ai+12a_{i+1},避免 ai+1a_{i+1} 接近 10910^9 时的边界问题。

    正确性证明

    由约分可知,窗口中的第 jj 个原不等式与相邻条件 ai+j<2ai+j+1a_{i+j}<2a_{i+j+1} 等价,所以窗口合法恰好等价于其中连续 kk 条边全部为好边。

    扫描到一条边时,维护量等于以该边结尾的最长连续好边段长度。若该长度至少为 kk,则最后 kk 条好边唯一对应一个以当前位置结尾的合法窗口;若小于 kk,则不存在这样的窗口。算法对每个可能的右端点恰计数一次,故得到全部且仅有合法窗口。

    复杂度分析

    每个元素只被扫描常数次,时间复杂度为 O(n)O(n),额外空间复杂度为 O(1)O(1)。

    • 1

    信息

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