解题思路
本题要求在连续窗口里最大化向下取整后的平均值,窗口长度至少为 w。
- 设答案为整数 x。因为班均是 ⌊sum/len⌋,可行的 x 一定落在 [minvp, maxvp] 里。
- 判定「是否存在长度 ≥w 的窗口,使得 ⌊sum/len⌋≥x」。x 是整数且长度为正,这等价于 sum≥x⋅len,也就是 ∑(vp−x)≥0。
- 令 bp=vp−x,问题变成:是否存在一段长度至少为 w 的子数组,和为非负。用前缀和 pre,窗口 (q,s] 的和是 pres−preq−1。要找某个 s≥w,使得 pres 减去 pre0,…,pres−w 里的最小值 ≥0。
- 从左到右扫右端点,维护前面那段前缀的最小值即可,判定是 O(m)。
- 对 x 二分最大化,共 O(logV) 次判定,V 不超过 2×109。