「题解」P9371 [APIO2023] 序列(中位数)
好题,与 [国家集训队] Middle 有异曲同工之妙。
思路来自 I_am_Accepted。
对于 \(x\),设 \(h,l,c\) 分别是 \(>x,<x,=x\) 的个数,则 \(x\) 成为中位数当且仅当 \(|h-l|\le c\),拆解绝对值:
\[\left\{\begin{matrix}
h-l-c\le 0&(1) \\
h-l+c\ge 0&(2)
\end{matrix}\right.
\]
枚举中位数 \(x\),设
\[\left\{\begin{matrix}
H_i=1&A_i>x \\
H_i=0&A_i\le x
\end{matrix}\right.
\]
\[\left\{\begin{matrix}
L_i=1&A_i\ge x \\
L_i=0&A_i< x
\end{matrix}\right.
\]
\(L,H\) 的变化是 \(O(n)\) 的。
预处理 \(p_x=\{i\mid A_i=x\}\),考虑何时存在另一个区间以 \(x\) 为中位数且包含 \(p_{l\sim r}\)。
令 \(s\) 等于 \(a_i\ne x\) 的 \(H_{l\sim r}\) 的区间和,若 \(s\le 0\),求出 \(L\) 以 \(l\) 为右端点的最大后缀和 \(L\) 和以 \(r\) 为左端点的最大前缀和 \(R\),若 \(L+R+r-l+1\ge 0\) 则存在。因为一定有一个时刻 \(L+R+r-l+1= 0\),此时条件 \((1)(2)\) 均满足。\(s\ge 0\) 类似。
双指针配合线段树即可解决。

浙公网安备 33010602011771号