会员专享
请先
登录,登录后可使用今日免费解锁;
开通会员后可解锁完整内容。
解题思路
本题要求在平台长度为 n 的线段上选取一个长度为 k 的区间,最大化该区间内与 m 个不重叠活跃区段的交集总长度。由于 n 可达 10^9,不能直接枚举每个位置,但 m 最多 10^5,可以使用事件驱动的滑动窗口差分法来高效求解。
记窗口左端点为整数 x (0 ≤ x ≤ n-k),窗口覆盖的信号量为 f(x)。当窗口右移一个单位时,长度变化仅与左右边界的活跃情况有关:
f(x+1) - f(x) = I(x+k) - I(x)
其中 I(pos) 为指示函数,表示位置 pos 是否在某个活跃区段内。这里将活跃区段看作半开区间 [li,ri),长度恰好为 ri−li,与题目一致。
I(pos) 是分段常数函数,仅在 li 和 ri 处发生跳变。因此 f(x) 的差分 diff(x)=f(x+1)−f(x) 也只在以下事件点发生变化: