洛谷P1419     寻找段落\color{green}{\text{洛谷P1419\ \ \ \ \ 寻找段落}}

\color{blue}{【题目】:} 给定一个长度为 nn 的序列 aia_i,定义 aia_i 为第 ii 个元素的价值。现在需要找出序列中最有价值的段落段落的定义是长度在 [S,T][S,T] 之间的连续序列。最有价值段落是指平均值最大的段落,段落的平均值 == 段落总价值 ÷\div 段落长度。

n<=1×105,1STn1×104ai1×104(1in)n<=1\times 10^5,1\leq S\leq T\leq n,-1\times 10^4 \leq a_i\leq 1\times 10^4 (1\leq i \leq n)

\color{blue}{【思路】:} 首先,二分答案 midmid,表示判断平均数是否 mid\geq mid

我们先把所有的 ai(1in)a_i(1 \leq i \leq n) 变为 bi=aimidb_i=a_i-mid。然后问题变成了求是否有一定长度在 [S,T][S,T] 之间的区间总和 0\geq 0

si=j=1ibjs_i = \sum\limits_{j=1}^{i} b_j,相当于判断是否有一对 (i,j)(i,j),满足 iTjiS,sisj0i-T \leq j \leq i-S,s_i - s_j\geq 0

所以,我们用一个单调队列维护 ss 即可。时间复杂度 O(n×logai)O(n \times \log a_i)

\color{blue}{【代码】:}
2020.03.08日常总结
2020.03.08日常总结

相关文章:

  • 2021-10-11
  • 2021-05-08
  • 2021-08-01
  • 2021-12-07
  • 2021-08-26
  • 2021-07-01
  • 2021-08-25
  • 2021-12-14
猜你喜欢
  • 2021-11-19
  • 2021-09-11
相关资源
相似解决方案