#P7357. 「PMOI-1」中位数

    ID: 6372 Type: RemoteJudge 3000ms 128MiB Tried: 0 Accepted: 0 Difficulty: 6 Uploaded By: Tags>树形数据结构二分O2优化可持久化线段树可持久化

「PMOI-1」中位数

题目描述

给定一棵以 11 为根的包含 nn 个节点的有根树。第 ii 个节点有点权 aia_i

定义函数 f(u,v)f(u,v) 表示从 uuvv 经过的所有节点的点权的可重集的中位数。

请注意,本题中的中位数的定义与数学中的定义略有不同:这里一个长度为 tt 的序列的中位数定义为这个序列第 t+12\left\lceil\frac{t+1}2\right\rceil 小的数。

定义函数 cover(x1,y1,x2,y2)\text{cover}(x_1,y_1,x_2,y_2) 表示从 x1x_1y1y_1 的路径是否完全覆盖了从 x2x_2y2y_2 的路径。如果完全覆盖,则 cover(x1,y1,x2,y2)=1\text{cover}(x_1,y_1,x_2,y_2)=1,否则 cover(x1,y1,x2,y2)=0\text{cover}(x_1,y_1,x_2,y_2)=0

你需要依次处理 qq 次操作,按照以下格式给出:

1 u:表示一次操作,需要你将点 uu 的点权对 11 异或

2 u v:表示一次询问,需要你求出 $\max\limits_{1\le i\le n,1\le j\le n}\{\text{cover}(i,j,u,v)f(i,j)\}$。

对于第二类操作,保证每次询问均满足 uu 不是 vv 的祖先且 vv 不是 uu 的祖先,且 uvu \neq v

你需要对于每个第二类操作,输出对应的值。

输入格式

第一行两个正数 nnqq ,分别表示树的节点数与询问次数。

第二行 nn 个整数,第 ii 个数表示第 ii 个节点的点权 aia_i

下面 n1n-1 行,每行两个整数 x,yx,y ,描述一条连接 xxyy 的边。

下面 qq 行,每行先输入一个整数 optopt ,表示本次是是操作还是询问。 若 opt=1opt=1 ,则这是一次操作,且接下来会输入一个整数 uu ;若 opt=2opt=2 ,则这是一次询问,且接下来会输入两个整数 u,vu,v 。其具体意义见【题目描述】。

输出格式

对于每次询问输出一行,即对应询问的答案。

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

提示

【样例解释】

第一次是询问。显然,只有 (i=4,j=8)(i=4,j=8) 满足 cover(i,j,u,v)=1\text{cover}(i,j,u,v)=1。此时 f(i,j)=3f(i,j)=3

第二次是操作。将 33 号节点的点权改为了 22

第三次是询问。当 i=4,j=3i=4,j=3 时,cover(i,j,u,v)=1\text{cover}(i,j,u,v)=1f(i,j)=4f(i,j)=4 。不难发现,对于其他所有满足 cover(i,j,u,v)=1\text{cover}(i,j,u,v)=1 的节点对 (i,j)(i,j),均没有 f(i,j)>4f(i,j) >4

【数据范围】

  • Subtask1(8pts):n,q50n,q\le50
  • Subtask2(12pts):n,q2×103n,q\le2\times10^3
  • Subtask3(16pts):n,q4×104n,q\le4\times10^4
  • Subtask4(10pts):保证树的形态随机生成;
  • Subtask5(12pts):保证没有 11 操作;
  • Subtask6(12pts):保证每次询问的 u,vu,v 都是叶子节点;
  • Subtask7(30pts):无特殊限制。

Subtask4 的随机方式为 :随机生成一个的排列 pp,对于 i[2,n]i\in[2,n]pip_ip1,p2,...,pi1p_1,p_2,...,p_{i-1} 中等概率随机的一个点连边。

对于 100%100\% 的数据满足,1n,q,ai1051\le n,q,a_i \le 10^5,保证每次询问均满足 uu 不是 vv 的祖先且 vv 不是 uu 的祖先,且 uvu \neq v