洛谷P1419 寻找段落
【题目】: 给定一个长度为 n 的序列 ai,定义 ai 为第 i 个元素的价值。现在需要找出序列中最有价值的段落。段落的定义是长度在 [S,T] 之间的连续序列。最有价值段落是指平均值最大的段落,段落的平均值 = 段落总价值 ÷ 段落长度。
n<=1×105,1≤S≤T≤n,−1×104≤ai≤1×104(1≤i≤n)
【思路】: 首先,二分答案 mid,表示判断平均数是否 ≥mid。
我们先把所有的 ai(1≤i≤n) 变为 bi=ai−mid。然后问题变成了求是否有一定长度在 [S,T] 之间的区间总和 ≥0。
记si=j=1∑ibj,相当于判断是否有一对 (i,j),满足 i−T≤j≤i−S,si−sj≥0。
所以,我们用一个单调队列维护 s 即可。时间复杂度 O(n×logai)。
【代码】:

