「题解」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\) 类似。

双指针配合线段树即可解决。

posted @ 2023-06-06 06:44  Network_Error  阅读(37)  评论(0)    收藏  举报