1 条题解

  • 0
    @ 2026-8-24 13:11:10

    思路

    固定询问长度 LL,先用前缀和求出每个长度为 LL 的窗口和 wsw_s。位置 ii 能被窗口起点

    max(1,iL+1)smin(i,NL+1)\max(1,i-L+1)\le s\le\min(i,N-L+1)

    覆盖,所以 kik_i 是窗口和数组上一个连续区间的最大值。

    做法

    从左到右扫描位置 ii,维护候选窗口起点的单调队列。若 iNL+1i\le N-L+1,把新窗口 wiw_i 加入队尾,并删除队尾中不大于它的窗口;再删除所有小于 iL+1i-L+1 的过期起点。队首就是当前 kik_i

    iikik_i 都转换为无符号 6464 位整数后相乘并异或,即自然完成模 2642^{64} 运算。

    正确性证明

    扫描到位置 ii 时,队列中保留的起点恰好都在合法区间内:新合法起点已加入,过期起点已删除。删除队尾时,被删除窗口更早且窗口和不大于新窗口;在新窗口过期前它不可能成为最大值,因此删除安全。队列中的窗口和严格递减,所以队首等于所有包含 ii 的长度 LL 窗口中的最大和,即 kik_i

    逐个位置按题意计算无符号乘积并异或,得到该询问要求的唯一输出。对每个询问独立执行上述过程,因此所有答案正确。

    复杂度分析

    每个窗口每次询问至多入队、出队一次,时间复杂度为 O(NQ)O(NQ),空间复杂度为 O(N)O(N)

    信息

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