P1439 两个排列的最长公共子序列(VAI,转化,LCS,LIS)

暴力思路设 \(f(i,j)\) 表示 \(A\) 序列前 \(i\) 项和 \(B\) 序列前 \(j\) 项相对应。
观察特殊性质,排列就是元素两两不同且上下两串唯一对应。
先压掉一维,设 \(f(i)\) 表示用去 \(B\) 序列前 \(i\) 项答案。
加入一个新元素的时候(对应 \(B\) 中的下标 \(pos\) 容易处理),操作即为:

  1. 求出 \(\alpha=\max\limits_{i<pos} f(i)\)
  2. \(f(pos)=\max\set{f(i),\alpha+1}\)

树状数组可以实现。

换一个方向,VAI,设 \(f(i)\) 表示答案为 \(i\) 时用去 \(B\) 序列最少个数。
加入一个新元素的时候,操作即为:

  1. 二分查找最后一个小于当前元素的位置 \(k\)
  2. \(f(k+1)=\min\set{f(k+1),pos}\)

可以通过。

再行转化,发现两侧是满射的映射关系,等价于 P2782。
于是去做排序,转化成 LIS。

posted @ 2026-02-08 16:54  2025ing  阅读(1)  评论(0)    收藏  举报