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)\)。

浙公网安备 33010602011771号