问题本质:寻找一个长度为 k 的新区间,其和 S' 大于被删除区间的和 S。候选区间依然分为三类:完全在删除区间左侧、完全在右侧、或跨越删除区间。
重构后的算法流程:
a. 初始化:
n, m 和数组 a。在一次信号分析中,记录了一串长度为 n 的离散信号,每个信号点的取值只能是 1 或 −1。 现在要对该信号进行 m 次独立的分析,每次分析之间互不影响。对于第 i 次分析,会选定一个区间 [ui,vi],计算该区间内所有信号值的总和 X,然后将该区间从记录中整体移除,剩余部分按原顺序拼接成一个新的信号串。 你的任务是:在拼接后的新信号串中,找到一个长度与移除区间相等的连续子段(即长度 k=vi−ui+1),使得该子段的信号值总和严格大于 X。如果有多个满足条件的子段,输出任意一个即可;如果不存在,则说明无解。
序列的长度 n 和询问次数 m 均不超过 10^5。所有询问涉及的区间长度之和也不超过 10^5。序列中的每个数值只能是 1 或 -1。
第一行包含一个整数 T,表示测试用例的数量。 对于每个测试用例:
开通会员即可查看完整视频题解: 1.题目讲解 2.思路分析 3.逐行代码手写
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册