题意
给两个排列 $a , b$ ,$a$ 一开始全都封闭,从左到右遍历 $b$ ,每次释放一个 $\Large a_{b_i}$ ,问每个时刻,释放后的序列 $a$ 的 $LIS$
题解
考虑时间倒流, 看作一个完整的排列按照一定顺序依次删除每个数, 然后每次需要计算 $LIS$ 的长度。 首先在 $O(n log n) $ 的时间内求出 $LIS$,并找到任意一个 $LIS$。当删除 x 时,如果 x 不在之前找 到的那个 LIS 中,那么显然 LIS 的长度是不会变化的,否则暴力重新计算出新的 LIS 即可。因为数据随机,因此 LIS 的期望长度是 $O( \sqrt n)$,删除的 x 位于 LIS 中的概率是 $\frac 1 {\sqrt n}$ ,也就是说期望时间复杂度为$O(n \sqrt n log n)$。
代码
1 |
|