P1056树上查询mock2query

时间限制 2000 ms内存限制 1024 MiB通过率 —
显示算法标签树 · LCA · 二分答案 · 线段树

【题目描述】

小 S 正在整理一批层层归档的资料,小 N 则不断提出需要核对的范围。为了能够统一处理这些树上查询任务,小 S 将资料之间的层级关系整理成一棵以结点 11 为根、共有 nn 个结点的有根树。

结点按照一次深度优先遍历中首次访问的顺序编号为 1,2,,n1,2,\ldots,n。因此,每个结点的子树中的结点编号构成一个连续区间,并且这个区间的左端点就是该结点本身。

每个结点 ii 有一个正整数权值 wiw_i。根结点的深度为 11,其余结点的深度等于其父亲结点的深度加 11

对于任意非空连续区间 [a,b][a,b],记 w(a,b)=i=abwiw(a,b)=\sum_{i=a}^{b}w_i,表示这个区间内所有结点的权值之和。

d(a,b)=dep(lca(a,a+1,,b))d(a,b)=\operatorname{dep}\bigl(\operatorname{lca}(a,a+1,\ldots,b)\bigr),其中 lca(a,a+1,,b)\operatorname{lca}(a,a+1,\ldots,b) 表示结点 a,a+1,,ba,a+1,\ldots,b 的最近公共祖先,dep(u)\operatorname{dep}(u) 表示结点 uu 的深度。

小 N 共提出 qq 次查询。每次查询给出三个整数 l,r,kl,r,k,要求小 S 在所有满足 labrl\leq a\leq b\leq rw(a,b)kw(a,b)\geq k 的连续区间 [a,b][a,b] 中,求出 d(a,b)d(a,b) 的最大值。

换言之,每次查询要求计算

max{dep ⁣(lca(a,a+1,,b))  |  labr,i=abwik}.\max\left\{ \operatorname{dep}\!\left(\operatorname{lca}(a,a+1,\ldots,b)\right) \;\middle|\; \begin{array}{c} l\leq a\leq b\leq r,\\[2pt] \displaystyle\sum_{i=a}^{b}w_i\geq k \end{array} \right\}.

保证每次查询均有 kw(l,r)k\leq w(l,r),因此至少存在一个满足条件的连续区间。

【输入格式】

从文件 query.in\textbf{\textit{query.in}} 中读入数据。

本题包含多组测试数据。

输入的第一行包含两个非负整数 c,Tc,T,分别表示测试点编号与测试数据的组数。c=0c=0 表示该测试点为样例。

对于每组测试数据:

第一行包含两个正整数 n,qn,q,分别表示树的结点数量与查询数量。

第二行包含 n1n-1 个正整数 p2,p3,,pnp_2,p_3,\ldots,p_n,其中 pip_i 表示结点 ii 的父亲结点。

第三行包含 nn 个正整数 w1,w2,,wnw_1,w_2,\ldots,w_n,表示每个结点的权值。

接下来 qq 行,每行包含三个正整数 l,r,kl,r,k,描述一次查询。

输入保证结点编号符合题目描述中的深度优先遍历顺序。

【输出格式】

输出到文件 query.out\textbf{\textit{query.out}} 中。

对于每次查询,输出一行一个正整数,表示满足条件的连续区间中 d(a,b)d(a,b) 的最大值。

【样例 1 输入】

0 15 41 1 3 32 1 3 2 41 5 63 5 42 4 51 2 3

【样例 1 输出】

2321

【说明/提示】

【样例 1 解释】

对于第一次查询,可以选择区间 [3,5][3,5]。该区间的权值之和为 99,其中所有结点的最近公共祖先为结点 33,深度为 22,因此答案为 22

对于第二次查询,可以选择区间 [5,5][5,5]。结点 55 的权值为 44,深度为 33,因此答案为 33

【样例 2】

见选手目录下的 query/query2.in\textbf{\textit{query/query2.in}}query/query2.ans\textbf{\textit{query/query2.ans}}

该组样例符合测试点 121\sim2 的数据范围。

【样例 3】

见选手目录下的 query/query3.in\textbf{\textit{query/query3.in}}query/query3.ans\textbf{\textit{query/query3.ans}}

该组样例符合测试点 353\sim5 的数据范围。

【样例 4】

见选手目录下的 query/query4.in\textbf{\textit{query/query4.in}}query/query4.ans\textbf{\textit{query/query4.ans}}

该组样例符合测试点 696\sim9 的数据范围。

【样例 5】

见选手目录下的 query/query5.in\textbf{\textit{query/query5.in}}query/query5.ans\textbf{\textit{query/query5.ans}}

该组样例符合测试点 101310\sim13 的数据范围。

【样例 6】

见选手目录下的 query/query6.in\textbf{\textit{query/query6.in}}query/query6.ans\textbf{\textit{query/query6.ans}}

该组样例符合测试点 142014\sim20 的数据范围。

【样例 7】

见选手目录下的 query/query7.in\textbf{\textit{query/query7.in}}query/query7.ans\textbf{\textit{query/query7.ans}}

该组样例符合测试点 212521\sim25 的数据范围。

【数据范围】

对于 100%100\% 的数据,保证 1n,q2×1051\leq n,q\leq2\times10^5,单个测试点内所有测试数据满足 n,q2×105\sum n,\sum q\leq2\times10^5

测试点编号nnqq特殊性质
1,21,2n300n\leq300q300q\leq300
353\sim5n2×103n\leq2\times10^3q2×103q\leq2\times10^3
696\sim9n2×105n\leq2\times10^5q2×105q\leq2\times10^5A
101310\sim13n2×105n\leq2\times10^5q2×105q\leq2\times10^5B
142014\sim20n2×105n\leq2\times10^5q2×105q\leq2\times10^5C
212521\sim25n2×105n\leq2\times10^5q2×105q\leq2\times10^5

特殊性质 A:对于所有 2in2\leq i\leq n,均有 pi=i1p_i=i-1

特殊性质 B:对于每次查询,均有 k=w(l,r)k=w(l,r)

特殊性质 C:对于每次查询,均有 kmini=lrwik\leq\min_{i=l}^{r}w_i

对于所有测试数据,保证:

  • 0c250\leq c\leq251T101\leq T\leq10
  • 对于所有 2in2\leq i\leq n,均有 1pi<i1\leq p_i<i
  • 对于所有 1in1\leq i\leq n,均有 1wi1091\leq w_i\leq10^9
  • 对于每次查询,均有 1lrn1\leq l\leq r\leq n1kw(l,r)1\leq k\leq w(l,r)

【题解】

已公开 1 篇题解,官方题解会优先显示。

查看题解