CF1761F1 Anti-median (Easy Version)

遇到这种题,我们一般会去发掘题目条件的性质。很容易猜到,如果 \(m\) 很大,其实会被 \(m\) 小的情况覆盖。

我们先猜,只用关心长度为 3 的连续段,如果这个结论是对的,会很容易的导向“连续段 dp”这个解法。

但我们发现,4 1 3 2 5 的时候,长为 3 的连续段全部满足,但是整体不满足。遇到结论被推翻的时候,不要着急打退堂鼓,而试图去修复这个结论。我们来研究长度为 5 的情况。

在长度为 3 的情况中,每 3 个数中间那个数一定是这三个数的最大值或者最小值。我们不妨钦定位置 2 是极大值,则很容易导向一个结论:偶数位置都是极大值,奇数位置都是极小值。并且这个结论可以对称到偶数为极小值,只需要把数取反做一次即可,因此我们以下以偶数位置为最大值来展开讨论。

现在我们可以研究长度为 5 的连续段了。我们以偶数位(即最大值)为中心那个位置来讨论,不妨把这个位置叫做 \(c_4\),其余四个位置分别是 \(c_2,c_3,c_5,c_6\),那么由于 \(c_4>c_3,c_4>c_5\),则 \(c_4\) 至少要大于 \(c_2,c_6\) 中一个(否则就成为中位数)。

我们可以先假设 \(c_4 > c_2\),看看会发生什么,可以分两类情况讨论:

  1. \(c_4 < c_6\)。此时对于 \(c_{4,5,6,7,8}\)\(c_6\) 已经满足条件了,所以和现在的情况是一样的,可以递归讨论。

  2. \(c_4 > c_6\),于是必须有 \(c_6 > c_8\),往下继续有 \(c_8 > c_{10}\) ,以此类推。于是发现,偶数位置的数会在一次递减后一直递减下去,因此偶数位置的数组成了一个单峰序列! 类似的,可以发现,奇数位置的数组成了一个单谷序列。

仔细观察,这个条件,和原条件是充要的。因为由于单谷单峰,至少可以取到一边有一半数比你大/比你小。到此为止,原条件便被转化完了,成为一个很有前途的形态。

但是还是不能 dp 啊?对于排列问题的 dp 处理,我们必须要有一定的顺序(例如只需要关心最大值,因此从小到大 dp,此时加入的新数无论如何都是最大值),或者考虑连续段 dp。但这里显然都不行,尽管单谷单峰是很好的性质,但最关键的一点是:我们无法有效的把两条序列结合在一起。而偏偏两条序列需要在一起来判断是否合法,这一点非常困扰我们。

因此,我们现在要做的事情是找到一个合适的 dp 顺序。我们继续观察一些被我们遗漏的性质,挖掘两条序列的关系。

假设 \(n\) 为偶数,我们在最极端的位置可以观察到:\(p_n > p_{n-1},p_2 > p_1\)。再由于奇数序列单谷,偶数序列单峰,可以发现,偶数序列两个最小值都比奇数序列对应两个最大值要大。这是否是一个合理的顺序呢?

显然,1 所在一定是奇数序列,我们可以从此往外走,寻找 2 的位置。以此类推,我们想做的事情是从 \(p\) 推到 \(p+1\)。于是需要分类讨论:

  1. 如果 \(p+1\) 在奇数序列。那么,由于 \(p\) 一定是谷底,\(p+1\) 必须在 \(p\) 旁边。

  2. 如果 \(p+1\) 在偶数序列。此时由于偶数序列单峰,\(p+1\) 只能在偶数序列两个端点,或者已经填过数的旁边,才可能合法。更进一步的,这个位置旁边两个奇数位需要已经填入数

因此!如果我们把两个序列连成一个 \(p_{2k},p_{2k-2},\cdots,p_2,p_1,p_3,\cdots,p_{2k-1}\) 状的序列,再头尾相接,形成一个环。此时,对于最小的任意 \(s\) 个数,他们一定在这个环上连续。到此为止,可以 dp 了。

\(f_{l,r}\) 表示目前覆盖了环上 \([l,r]\) 区间的点(可以 \(l > r\),此时代表穿越了右端点)。

\(f_{l,r}\) 可以转移到 \(f_{l-1,r},f_{l,r+1}\),转移过程中,容易 \(O(1)\) 判断是否合法。

代码

posted @ 2025-04-11 17:08  EnderDeer  阅读(35)  评论(0)    收藏  举报
Live2D