CF1852A Ntarsis' Set 题解
题意:

思路:
当 $ a_1 > 1 $ 时,最终答案一定为 $ 1 $ 。
当 $ a_1 = 1 $ 时,正难则反:
设$ pos_{k} $ $ = 1 $ ,表示第 $ k $ 次操作后,最终答案 $ ans $ 所处的位置, $ ans $ 初始化为 $ 1 $ 。
设第 $ k - 1 $ 次操作后,第 $ k $ 次操作前, $ ans $ 的位置为 $ pos_{k-1} $ 。那么, $ a_i $ 与 $ x $ 只有两种关系: $ a_i < pos_{k-1} $ 或 $ a_i > pos_{k-1} $ 。对于 $ a_i > pos_{k-1} $ ,其所删除的数字排在 $ pos_{k-1} $ 后面,对 $ ans $ 的位置无影响;对于 $ a_i < pos_{k-1} $ ,其所删除的数字排在 $ ans $ 前面,又由于第 $ k $ 次操作后, $ ans $ 排在第 $ pos_{k} $ 位,因此 $ a_i < pos_{k-1} $ 的 $ a_i $ 一定有 $ pos_{k-1} - pos_{k} $ 个。
因此,只需要 $ for \space i : 1 $ -> $ n $ 遍历 $ a_i $ ,当满足 $ a_i < ans $ 时, $ ans = ans + 1 $ ;遍历结束后, $ pos_{k-1} = ans $ 。即可求出第 $ k - 1 $ 次操作后,第 $ k $ 次操作前, $ ans $ 的位置 $ pos_{k-1} $ 。
不断重复以上过程,即可获得第 $ 0 $ 次操作后,第 $ 1 $ 次操作前, $ ans $ 的位置 $ pos_1 $ ,此时 $ ans = pos_1 $ ,即为最终答案。
在进行以上过程中,由于 $ ans $ 和 $ ai $ 单调递增,每次循环遍历 $ a $ 时,都会重复计数,时间复杂度为 $ O(k * n) $ ,显然会超时。我们另设一个变量 $ index $ ,记录上次遍历结束时的位置,下一次遍历时,先加上重复计数的部分,再从该位置开始遍历,即可达到时间复杂度 $ O(k + n) $ 。
浙公网安备 33010602011771号