ABC341G Highest Ratio

因为大于号打成小于号赛后 \(5\min\) 过的,我是什么品种的傻逼,破大防。

题目传送门

  • 给出长度为 \(N\) 的序列 \(A_1\sim A_N\),对于每个 \(i\),求:

\[\max\limits_{r=i}^N\dfrac{\sum_{j=i}^r A_j}{r-i+1} \]

  • \(N\le 2\times 10^5\)\(A_i\le 10^6\)

  • \(\text{2 s / 1 GB}\)

先做一遍前缀和,记为 \(s_i=\sum\limits_{j=1}^iA_j\),然后考虑二分答案能否 \(\ge g\)

\(S(i,r)=\dfrac{s_r-s_{i-1}}{r-i+1}\),这个条件等价于在 \([i,N]\) 中存在一个 \(r\) 使得 \(S(i,r)\ge g\)

整理可得我们要判断是否存在 \(r\in[i,N]\) 使得 \(s_r-gr\ge s_{i-1}-gi+g\)。容易发现右边是定值,只要求左边的最大值。

\(z=s_r-gr\),则 \(gr+z=s_r\),考虑平面上由 \((r,s_r)\) 构成的点集,相当于在点集中找一个点使得,过这个点作斜率为 \(g\) 的直线,截距最大。那么这个东西一定在一个从右至左斜率非降的上凸包上。

\(P_u(x_u,y_u)\) 表示上凸包上斜率第 \(i\) 靠右的点。记 \(K(P,Q)\) 表示直线 \(PQ\) 的斜率,画图可以发现当 \(K(P_u,P_{u+1})\le g\) 时,\(P_{u+1}\) 不比 \(P_u\) 更劣;当 \(K(P_u,P_{u+1})>g\) 时,\(P_{u}\)\(P_{u+1}\) 更优。

那最大的 \(u\) 使得 \(K(P_u,P_{u+1})\le g\) 一定是一个最优决策。由于斜率单调,用单调队列维护上凸包,二分找到这个点即可得到最大值,然后判断是否合法。

设值域为 \(V\),时间复杂度为 \(\mathcal{O}(N\log N\log |V|)\),空间复杂度为 \(\mathcal{O}(N)\)

AC Code

posted @ 2024-02-17 22:23  lzyqwq  阅读(37)  评论(0)    收藏  举报