#P12796. Mon2tr

Mon2tr

Mon2tr

Problem Description

请注意本题特殊的空间限制。 “生命野蛮蓬勃,大地千变万化。人造机器轰鸣运作,源石能的光辉照亮了暗影。人们挣扎在暗处,向往光明,在辉煌时轻视阴影,如是反复。” 给定一棵由编号为 1,2,3,,n1,2,3,\cdots,n 的点构成的有根树。记 did_i 表示编号为 ii1in1\le i\le n)的点到树根的唯一简单路径上的 点数 (对于树根本身,这个值为 11)。 现在有 qq 次询问。第 ii1iq1\le i\le q)次询问给定整数 xi,yi,zix_i,y_i,z_i。对于整数 jj1jn1\le j\le n),定义 vj=dLCA(j,xi)v_j=d_{\text{LCA}(j,x_i)},其中 LCA(u,v)\text{LCA}(u,v) 表示编号分别为 u,vu,v 的点的最近公共祖先的编号。 对于第 ii1iq1\le i\le q)次询问,求满足 jvjyijj+vjzij-v_j\le y_i\le j\le j+v_j\le z_i 的整数 jj1jn1\le j\le n)中,j+vjj+v_j 的最大值。如果 yi>ziy_i>z_i 或者不存在符合条件的整数,答案为 00

Input

本题包含多组测试数据。 来自 Kal'tsit 的温馨提示:本题输入输出量较大,请使用合适的输入输出方式。你可以使用下面链接中给出的输入输出模板。同时请选手注意代码的时间和空间常数消耗,常数过大,例如滥用 C++ STL 容器的代码不保证能够通过。

https://www.luogu.me/paste/y4lm88ha

char buf[1<<22],*p1,*p2;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<22,stdin),p1==p2)?EOF:*p1++)
inline int read(){
	int x=0;char ch=0;
	while((ch<'0'||ch>'9'))ch=getchar();
	while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch-'0'),ch=getchar();
	return x;
}
inline void write(int x,char tl=0){
	static int sta[10];
	int top=0;
	do{sta[top++]=x%10,x/=10;}while(x);
	while(top)putchar(sta[--top]+48);
	if(tl)putchar(tl);
}

首先在第一行输入一个整数 TT1T3.5×1051\le T\le3.5\times10^5)表示测试数据组数。 对于每一组测试数据,输入包含 q+2q+2 行。 第一行包含两个整数 n,qn,q1n8×104,1q1051\le n\le 8\times10^4,1\le q\le 10^5,$1\le\sum n\le3.5\times10^5,1\le \sum q\le 5\times 10^5$),分别表示树上点的数量和询问的次数。 第二行包含 nn 个整数 fa1,fa2,fa3,,fanfa_1,fa_2,fa_3,\cdots,fa_n0fa1,fa2,fa3,,fann0\le fa_1,fa_2,fa_3,\cdots,fa_n\le n)表示每个点的父亲编号。若 fai=0fa_i=01in1\le i\le n)则表示编号为 ii 的点为树根。 接下来 qq 行,第 i+2i+21iq1\le i\le q)行包含三个整数 xi,yi,zix'_i,y'_i,z'_i0xi,yi,zi<1090\le x'_i,y'_i,z'_i<10^9),表示与第 ii 次询问的参数有关的三个数。 对于第 ii1iq1\le i\le q)次询问,你需要通过以下操作得到 xi,yi,zix_i,y_i,z_i

  1. lanslans 表示第 i1i-1 次询问的答案。若 i=1i=1,则令 lans=0lans=0
  2. xi=[(xi+lans)modn]+1x_i=[(x'_i+lans)\bmod n]+1yi=[(yi+lans)mod(2n1)](n1)y_i=[(y'_i+lans)\bmod(2n-1)]-(n-1)zi=[(zi+lans)mod(2n1)]+1z_i=[(z'_i+lans)\bmod(2n-1)]+1,其中 mod\bmod 表示取模,例如 3mod2=1,(7)mod3=23\bmod 2=1,(-7)\bmod 3=2。 保证输入的是一棵有根树。

Output

对于每一组测试数据,输出包含 qq 行。 第 ii1iq1\le i\le q)行包含一个整数表示第 ii 次询问的答案。

Sample Input

5
5 5
2 3 4 5 0
3 428538 54277
3 417360 4017
3 892741 445551
4 964351 433610
4 472928 556419
5 5
2 0 5 3 1
2 145658 137247
5 616008 743457
3 236233 341788
5 338103 325826
2 722091 315410
5 5
5 0 4 2 3
1 904355 654626
2 418807 822821
4 45452 454729
5 4372 624796
3 138698 133893
5 5
2 0 1 5 2
1 698219 122911
5 682494 893039
3 293682 893575
1 804585 301494
5 634397 319946
15 15
5 4 4 9 3 7 9 15 0 3 12 6 9 3 9
2 305062 35660
3 843437 749658
11 170333 369270
1 311572 416623
8 860851 743360
4 16581 926304
5 369493 824555
6 517688 889937
8 710314 148564
7 21922 973381
13 790964 3688
7 989786 105365
1 359041 27784
6 623431 2814
6 678899 377943

Sample Output

3
6
0
0
3
0
3
2
0
3
0
0
5
0
0
6
0
0
0
5
0
0
4
0
3
13
7
8
0
17
0
4
0
0
0

Hint

在样例的第一组测试数据中,树的结构如下图所示。 图片 这组测试数据共有 55 次询问。 在第 11 次询问中,x1=4,y1=1,z1=8x_1=4,y_1=-1,z_1=8

  1. j=1j=1,则 jvj=1,j+vj=3j-v_j=-1,j+v_j=3,满足 jvjy1jj+vjz1j-v_j\le y_1\le j\le j+v_j\le z_1
  2. j=2j=2,则 jvj=0,j+vj=4j-v_j=0,j+v_j=4,不满足题意。
  3. j=3j=3,则 jvj=1,j+vj=5j-v_j=1,j+v_j=5,不满足题意。
  4. j=4j=4,则 jvj=2,j+vj=6j-v_j=2,j+v_j=6,不满足题意。
  5. j=5j=5,则 jvj=4,j+vj=6j-v_j=4,j+v_j=6,不满足题意。 因此,答案为 33
  6. 在第 22 次询问中,x2=2,y2=2,z2=7x_2=2,y_2=2,z_2=7。取 j=2/3/4j=2/3/4,答案为 66
  7. 在第 33 次询问中,x3=5,y3=3,z3=4x_3=5,y_3=-3,z_3=4。答案为 00
  8. 在第 44 次询问中,x4=5,y4=3,z4=9x_4=5,y_4=-3,z_4=9。答案为 00
  9. 在第 55 次询问中,x5=5,y5=1,z5=4x_5=5,y_5=1,z_5=4。取 j=2j=2,答案为 33。 在样例的第五组测试数据中,树的结构如下图所示。 图片 这组测试数据共有 1515 次询问。
  10. 在第 11 次询问中,x1=3,y1=3,z1=20x_1=3,y_1=-3,z_1=20。答案为 00
  11. 在第 22 次询问中,x2=4,y2=13,z2=9x_2=4,y_2=-13,z_2=9。答案为 00
  12. 在第 33 次询问中,x3=12,y3=2,z3=14x_3=12,y_3=2,z_3=14。取 j=3j=3,答案为 44
  13. 在第 44 次询问中,x4=6,y4=14,z4=14x_4=6,y_4=-14,z_4=14。答案为 00
  14. 在第 55 次询问中,x5=9,y5=1,z5=4x_5=9,y_5=1,z_5=4。取 j=2j=2,答案为 33
  15. 在第 66 次询问中,x6=8,y6=11,z6=19x_6=8,y_6=11,z_6=19。取 j=12j=12,答案为 1313
  16. 在第 77 次询问中,x7=4,y7=3,z7=12x_7=4,y_7=3,z_7=12。取 j=5j=5,答案为 77
  17. 在第 88 次询问中,x8=14,y8=2,z8=22x_8=14,y_8=2,z_8=22。取 j=5j=5,答案为 88
  18. 在第 99 次询问中,x9=2,y9=11,z9=6x_9=2,y_9=11,z_9=6。答案为 00
  19. 在第 1010 次询问中,x10=8,y10=13,z10=26x_{10}=8,y_{10}=13,z_{10}=26。取 j=15j=15,答案为 1717
  20. 在第 1111 次询问中,x11=1,y11=8,z11=23x_{11}=1,y_{11}=-8,z_{11}=23。答案为 00
  21. 在第 1212 次询问中,x12=8,y12=2,z12=9x_{12}=8,y_{12}=2,z_{12}=9。取 j=3j=3,答案为 44
  22. 在第 1313 次询问中,x13=6,y13=11,z13=7x_{13}=6,y_{13}=11,z_{13}=7。答案为 00
  23. 在第 1414 次询问中,x14=7,y14=4,z14=2x_{14}=7,y_{14}=4,z_{14}=2。答案为 00
  24. 在第 1515 次询问中,x15=7,y15=5,z15=16x_{15}=7,y_{15}=-5,z_{15}=16。答案为 00

Source

2025“钉耙编程”中国大学生算法设计暑期联赛(4)