#P13968. [VKOSHP 2024] Classics

    ID: 13951 远端评测题 1000ms 512MiB 尝试: 0 已通过: 0 难度: 7 上传者: 标签>动态规划 DP平衡树树状数组2024

[VKOSHP 2024] Classics

Description

你可能已经熟悉了在一个数组中寻找最长上升子序列的经典问题。设 aa 是一个包含 nn 个整数的数组。一个子序列 i1<i2<<iki_1 < i_2 < \ldots < i_k 被称为“上升”的,如果 ai1<ai2<<aika_{i_1} < a_{i_2} < \ldots < a_{i_k}。最长上升子序列即为长度最大的上升子序列。当然,我们不会让你解决这个经典问题;你需要解决一个更复杂的版本……

一开始,数组 aa 为空。然后,数字 1,2,,n1, 2, \ldots, n 依次被加入到数组中。数字 ii 被插入到数组的第 pip_i 个位置。数组中的位置编号为 11kk,其中 kk 是当前数组的大小。当在一个大小为 kk 的数组的第 pp 个位置插入一个元素时,原本处于第 pp 到第 kk 个位置的所有元素都会向右移动一位,当前元素被放入空出的位置。

你的任务是在每次插入新元素后,输出当前数组中最长上升子序列的长度。

Input Format

第一行包含一个整数 nn1n2000001 \le n \le 200\,000)——表示要插入的元素个数。

第二行包含 nn 个整数 p1,p2,,pnp_1, p_2, \ldots, p_n1pii1 \le p_i \le i)——pip_i 表示第 ii 个元素插入的位置。

Output Format

输出 nn 个整数,依次表示每次插入新元素后,当前数组中最长上升子序列的长度。

5
1 2 1 3 4
1
2
2
2
3
1
1
1

Hint

第一个样例中的数组变化如下:$[] \to [1] \to [1, 2] \to [3, 1, 2] \to [3, 1, 4, 2] \to [3, 1, 4, 5, 2]$。

由 ChatGPT 4.1 翻译