Nonsense Time[hdu6635]

题意

一个随机的排列 $p$,一开始所有位置都不能用。每次随机加一个位置使其变得可用,然后求当前最长上升子序列的长度。

$n\leq 50000,T\leq 3$

时限 $14s$

题解

一个很重要的前置知识:长度为 $n$ 的排列的最长上升子序列的长度的期望是 $O(\sqrt n)$

记住就好,不会证明…

因此每个位置有 $O(\frac{1}{\sqrt n})$ 的概率在LIS上。

本题倒着做或许会方便一些,每次删掉一个数。

那么每次先暴力求出LIS及其位置。如果每次使其不可用的位置不在LIS上,那么不管它。否则暴力再算一遍LIS。

期望复杂度 $O(\frac{n^2\log n}{\sqrt n})=O(n\sqrt n\log n)$

这是一道用了比较重要的性质的题,在此记录一下以免忘记。

程序

咕咕咕