确定矛盾,细化限制—— P10144 [WC2024] 水镜 题解
确定矛盾,细化限制—— P10144 [WC2024] 水镜 题解
\(\mathcal O(n^3)\) 做法
我们发现 \(h_i'\) 其实是将 \(h_i\) 关于 \(L\) 对称,可以发现,存在一个合法的解当且仅当 \(|h_i-L|\) 严格先减后增,形如一个 V 字,我们的选择方案如下:
现在考虑上升与下降时 \(L\) 满足的条件,以下降为例:
根据 \(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|\),即不存在:
即:
| \(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)\)。

浙公网安备 33010602011771号