P9961 Solution

· · 题解

不会严格证明结论,但是过了。

考虑到当 x 后面紧跟 x+1 时这两个数完全可以绑在一起,因此我们考虑将 i 归位时尽可能增加绑定数对的数量。

假定 1\sim i-1 已经归位,考虑将 i 归位,如果 i 已经在位置上了可以直接跳过,否则 i 的位置必然为第二个区间的左端点,这时候考虑另外三个点选哪里,若 i+1i 的左边,我们可以将 i-1,i+1 中间的数与 i 交换(若 i-1 紧贴 i+1,则第一个区间取 i+1 的位置到 i 的位置减一),i 归位的同时 ii+1 绑定;若 i+1i 的右边,将第二个区间的右端点更新为 i+1 的位置,继续考虑 i+2 的位置,直到找到一个数在 i 左侧。若 j 为找到的第一个在 i 左侧的数,则操作后 i 会归位,j-1 会与 j 贴合。由于操作前 i 没有归位,其左侧必定有别的数。

猜为什么这样是对的:将 i,j,j+1 的位置视为“墙”,“墙”把原序列分为了四段,每段段内的相对顺序没变,意味着其它优化位置没有被破坏,看起来很对。