#P14891. Trink

Trink

题目描述

给定一棵以 11 为根结点的有根树 TT,儿子之间有左右顺序。初始时,TT 只有一个结点 11

接下来有 nn 次操作,第 ii 次操作给出 fif_i,你需要新建一个结点 i+1i+1 作为 fif_i 最右侧的儿子结点,加入树 TT。每次操作后,你需要回答以下问题:


对一棵树,定义「Trink 变换」为:

  • 同时考虑所有不为 11 的结点 uu,如果 uu 不是 uu 父亲从左向右的第一个儿子,则把 uu 的父亲改为所有在 uu 左侧的兄弟中最靠右的一个。

问:对 TT 最少执行多少次 Trink 变换后,树 TT 满足,对树 TT 继续进行一次 Trink 变换后,树 TT 的形态保持不变。


询问之间互相独立。也就是说,并不会真的对原树进行「Trink 变换」。

输入格式

第一行,一个整数 nn1n1061 \leq n \leq 10^6)。

第二行,nn 个整数,依次表示 f1,,fnf_1, \ldots, f_n1fii1 \leq f_i \leq i)。

输出格式

输出 nn 行,第 ii 行包含一个整数,表示第 ii 次操作后的答案。

5
1 1 2 2 5
0
1
2
3
4

提示

样例解释

对于最后一次询问,以下展示了第 k (0k4)k\ (0 \leq k \leq 4) 次操作后,树 TT 的形态: