P1410 子序列 题解
Steadywelkin · · 题解
这里提供一个运用
Dilworth 定理
给定一个偏序关系,比如一个数出现的位置
i 在另一个数出啊先的位置j 之前,并且满足a_i>a_j ,那么这个满足这个偏序关系的序列就称为链,关于链和反链的定义:
链: 一个偏序集
S 的全序子集(全序是指任意两个元素可以比较)反链: 一个偏序集
S 的子集,其中任意两个元素不可比较最大链的长度等于最少反链覆盖数,最大反链长度等于最少链覆盖数
所以对于本题而言,我们可以先对于整个序列求一次最长反链,也就是最长不上升子序列的长度(下面设为
如图所示,当
我们将
-
(1)如果
\begin{aligned}len\le\frac{n}{2}\end{aligned} 那么可以通过划分将原序列分为两个严格上升子序列 -
(2)如果
\begin{aligned}len>\frac{n}{2}\end{aligned} 那么在pos 前的一个序列长度就已经超过了\begin{aligned}\frac{n}{2}\end{aligned} ,显然这种情况是不能划分的
但是这样划分还是不完备的,如下图:
虽然映射之后的
-
-
否则有解
至于
寻找映射到的位置可以通过二分查找,时间复杂度
加上前面的寻找最长不上升子序列的