本题要求在平台长度为 (n) 的线段上选取一个长度为 (k) 的区间,最大化该区间内与 (m) 个不重叠活跃区段的交集总长度。由于 (n) 可达 (10^9),不能直接枚举每个位置,但 (m) 最多 (10^5),可以使用事件驱动的滑动窗口差分法来高效求解。
记窗口左端点为整数 (x\ (0 \le x \le n-k)),窗口覆盖的信号量为 (f(x))。当窗口右移一个单位时,长度变化仅与左右边界的活跃情况有关: [ f(x+1) - f(x) = I(x+k) - I(x) ] 其中 (I(pos)) 为指示函数,表示位置 (pos) 是否在某个活跃区段内。这里将活跃区段看作半开区间 ([l_i, r_i)),长度恰好为 (r_i - l_i),与题目一致。
在一条长度为 n 的直线实验平台上,布设有 m 个互不重叠的活跃区段,第 i 个区段的坐标范围为 (li,ri),其长度为 ri−li。现需放置一个长度固定为 k 的采集窗口,窗口必须紧贴平台且长度为整数,即窗口区间可表示为 [x,x+k],其中 x 为整数且 0≤x≤n−k。窗口能够捕获的信号量等于窗口区间与所有活跃区段交集的长度之和。请你求出能够获得的最大信号量。
数据范围:
第一行包含三个正整数 n、m、k。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.