loj#P6380. 「是男人就过8题——Pony.ai」IntervalTree

「是男人就过8题——Pony.ai」IntervalTree

题目描述

区间树是我们熟悉的数据结构线段树的一个拓展,她的每个点仍然表示一个区间,但是区间的分割点不一定是中点。

类似线段树,我们能在区间树上做一些询问,我们定义询问 [l,r][l,r] 的时间复杂度为我们定位区间 [l,r][l,r] 所需要访问的点数。

更加正式的,我们定义 S[l,r]S[l,r] 为定位区间 [l,r][l,r] 需要访问的节点集合,一个节点 vS[l,r]v\in S[l,r] 需要满足以下条件。

  1. v 代表的区间是 [l,r][l,r] 的子区间,但是 vv 父节点不满足这个条件

  2. v 中后代至少有一个节点满足条件 11

现在给定一个 [1,n][1, n] 的区间树和 qq 次询问,每次询问包含一个正整数 kk, 你需要求出有多少区间的时间复杂度恰好等于 kk

输入格式

输入包含多组测试数据,每组数据的第一行两个整数 nnqq

每组数据的第二行包含 n1n-1 个整数,以先序遍历的形式给出了树上每个非叶子节点的分割点,若 [l,r][l,r] 的分割点为 mm, 则其左孩子为 [l,m][l,m], 右孩子为 [m+1,r][m+1,r]

输出格式

对于每组询问,输出一行表示答案

6 7
5 1 3 2 4
1
2
3
4
5
6
7
1
2
2
3
6
4
3

数据范围与提示

输入保证 lm<rl\le m< r, n,q105n, q\le 10^5 以及 k109k\le 10^9, 所有数据的 n\sum nq\sum q 均不超过 5×1055 \times 10^5

特别鸣谢楼天城和吉如一提供试题,数据。