#P13625. [ICPC 2024 APC] Tree Quiz

    ID: 14771 远端评测题 4000ms 512MiB 尝试: 0 已通过: 0 显示难度省选/NOI− 上传者: 标签>线段树2024可持久化线段树ICPC

[ICPC 2024 APC] Tree Quiz

题目描述

你的朋友想考考你。给你一棵有 nn 个节点的有根树,节点编号从 11 到 nn。对于每个节点 ii,它的父节点是 pip_i,除了根节点(没有父节点的节点)的 pi=0p_i=0。如果节点 u=vu=v,或者节点 uu 是节点 vv 的父节点(如果存在)的祖先,那么我们说节点 uu 是节点 vv 的一个祖先。

如果节点 zz 同时是节点 xx 和节点 yy 的祖先,我们称节点 zz 是节点 xx 和 yy 的一个共同祖先。如果节点 zz 是节点 xx 和 yy 的一个共同祖先,并且节点 xx 和 yy 的任何一个共同祖先也都是节点 zz 的祖先,那么我们称节点 zz 是节点 xx 和 yy 的最近共同祖先。我们将节点 xx 和 yy 的最近共同祖先表示为 LCA⁡(x,y)\operatorname{LCA}(x,y)。特别地,LCA⁡(x,x)=x\operatorname{LCA}(x,x)=x。

你的朋友想要运行以下伪代码:

let L be an empty array
for x = 1 to n
  for y = 1 to n
    append ((x-1)*n*n + (LCA(x,y)-1)*n + (y-1)) to L
sort L in non-decreasing order

你的朋友有 qq 个问题,编号从 11 到 qq。在第 jj 个问题中,会给你一个整数 kjk_j,并要求你找出数组 LL 中的第 kjk_j 个元素。请注意,LL 是以 11 为起始下标的,所以其下标范围从 11 到 n2n^2。为了通过测试,你必须回答所有问题。

输入格式

输入的第一行包含两个整数 nn 和 qq(1≤n≤100,0001 \le n \le 100,000;1≤q≤100,0001 \le q \le 100,000)。第二行包含 nn 个整数 p1,p2,…,pnp_1, p_2, \dots, p_n(对于所有的 ii,0≤pi≤n0 \le p_i \le n)。保证给定的值代表一棵有根树。接下来的 qq 行每行包含一个整数。第 jj 行包含 kjk_j(1≤kj≤n21 \le k_j \le n^2)。

输出格式

对于每个问题,按顺序输出一个整数作为问题的答案。

5 3
3 0 2 2 3
1
18
25
0
82
124

提示

输入中的树如图 K.1 所示。

LL 的元素为 $(0, 6, 8, 12, 14, 30, 31, 32, 33, 34, 56, 58, 60, 62, 64, 80, 81, 82, 84, 93, 106, 108, 110, 112, 124)$。