Loading

确定矛盾,细化限制—— P10144 [WC2024] 水镜 题解

确定矛盾,细化限制—— P10144 [WC2024] 水镜 题解

\(\mathcal O(n^3)\) 做法

我们发现 \(h_i'\) 其实是将 \(h_i\) 关于 \(L\) 对称,可以发现,存在一个合法的解当且仅当 \(|h_i-L|\) 严格先减后增,形如一个 V 字,我们的选择方案如下:

现在考虑上升与下降时 \(L\) 满足的条件,以下降为例:

\[|h_{i-1}-L|>|h_i-L|\implies 2(h_i-h_{i-1})L>(h_i-h_{i-1})(h_i+h_{i-1}) \]

根据 \(h_{i-1}\)\(h_i\) 的大小关系讨论即可。上升的方向取反

于是对于每一个区间,枚举 V 型结构转折点即可。枚举复杂度 \(\mathcal O(n^2)\),检验复杂度 \(\mathcal O(n)\)

\(\mathcal O(n^2)\)做法

发现有区间包含单调性,即若一个区间 \(S\) 满足条件,则 \(S\) 的所有子区间都可以。

于是不用枚举所有区间,而是用双指针进行处理。

------------------------------思路分界线-------------------------------------

\(\mathcal O(n\log n)\) 做法

时间复杂度的瓶颈在Check函数这是由于我们需要根据 V 型结构转折点的不同进行不同的可取集合限制,即两个相邻元素是上升还是下降是不确定的。

确定矛盾,细化限制——用于需要枚举的Check:即整理出一个确切的矛盾点,使得可以不用枚举而是可以直接进行确定性的限制。

一个整体 V 型结构的充要条件是不存在任何的 \(\land\) 结构,即不存在 \(|h_{i-1}-L|\le|h_{i}-L|\ge |h_{i+1}-L|\),即不存在:

\[\left\{\begin{aligned} 2(h_i-h_{i-1})L\le(h_i-h_{i-1})(h_i+h_{i-1})\\ 2(h_i-h_{i+1})L\le(h_i-h_{i+1})(h_i+h_{i+1}) \end{aligned}\right. \]

即:

\(L\not\in\) \(h_{i-1}<h_i\) \(h_{i-1}=h_i\) \(h_{i-1}>h_i\)
\(h_i<h_{i+1}\)
\(h_i=h_{i+1}\)
\(h_{i}>h_{i+1}\)

将表中的限制列出来,发现要么是空集,要么是单边不等式,令 \(A(i)=\{L|\left|h_{i-1}-L\right|\le|h_{i}-L|\ge |h_{i+1}-L|\}\),则区间 \([l,r]\) 的不可行区间为 \(\bigcup_{i=l+1}^{r-1}A(i)\) ,这是可以用 \(ST\) 表做到 \(\mathcal O(n\log n)\),但用一些神奇算法可以做到 \(\mathcal O(n)\)

posted @ 2025-01-03 17:08  lupengheyyds  阅读(40)  评论(0)    收藏  举报