1 条题解
-
0
思路
固定询问长度 ,先用前缀和求出每个长度为 的窗口和 。位置 能被窗口起点
覆盖,所以 是窗口和数组上一个连续区间的最大值。
做法
从左到右扫描位置 ,维护候选窗口起点的单调队列。若 ,把新窗口 加入队尾,并删除队尾中不大于它的窗口;再删除所有小于 的过期起点。队首就是当前 。
把 与 都转换为无符号 位整数后相乘并异或,即自然完成模 运算。
正确性证明
扫描到位置 时,队列中保留的起点恰好都在合法区间内:新合法起点已加入,过期起点已删除。删除队尾时,被删除窗口更早且窗口和不大于新窗口;在新窗口过期前它不可能成为最大值,因此删除安全。队列中的窗口和严格递减,所以队首等于所有包含 的长度 窗口中的最大和,即 。
逐个位置按题意计算无符号乘积并异或,得到该询问要求的唯一输出。对每个询问独立执行上述过程,因此所有答案正确。
复杂度分析
每个窗口每次询问至多入队、出队一次,时间复杂度为 ,空间复杂度为 。
信息
- ID
- 1037
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者