「PMOI-1」中位数

题目描述

给定一棵以 $1$ 为根的包含 $n$ 个节点的**有根树**。第 $i$ 个节点有点权 $a_i$。 定义函数 $f(u,v)$ 表示从 $u$ 到 $v$ 经过的所有节点的点权的**可重集**的中位数。 请注意,**本题中的中位数的定义与数学中的定义略有不同**:这里一个长度为 $t$ 的序列的中位数定义为这个序列第 $\left\lceil\frac{t+1}2\right\rceil$ 小的数。 定义函数 $\text{cover}(x_1,y_1,x_2,y_2)$ 表示从 $x_1$ 到 $y_1$ 的路径是否完全覆盖了从 $x_2$ 到 $y_2$ 的路径。如果完全覆盖,则 $\text{cover}(x_1,y_1,x_2,y_2)=1$,否则 $\text{cover}(x_1,y_1,x_2,y_2)=0$。 你需要依次处理 $q$ 次操作,按照以下格式给出: `1 u`:表示一次操作,需要你将点 $u$ 的点权对 $1$ **异或**; ` 2 u v`:表示一次询问,需要你求出 $\max\limits_{1\le i\le n,1\le j\le n}\{\text{cover}(i,j,u,v)f(i,j)\}$。 对于第二类操作,保证每次询问均满足 $u$ 不是 $v$ 的祖先且 $v$ 不是 $u$ 的祖先,且 $u \neq v$。 你需要对于每个第二类操作,输出对应的值。

输入输出格式

输入格式


第一行两个正数 $n$ 和 $q$ ,分别表示树的节点数与询问次数。 第二行 $n$ 个整数,第 $i$ 个数表示第 $i$ 个节点的点权 $a_i$。 下面 $n-1$ 行,每行两个整数 $x,y$ ,描述一条连接 $x$ 与 $y$ 的边。 下面 $q$ 行,每行先输入一个整数 $opt$ ,表示本次是是操作还是询问。 若 $opt=1$ ,则这是一次操作,且接下来会输入一个整数 $u$ ;若 $opt=2$ ,则这是一次询问,且接下来会输入两个整数 $u,v$ 。其具体意义见【题目描述】。

输出格式


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

输入输出样例

输入样例 #1

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

输出样例 #1

3
4

说明

【样例解释】 第一次是询问。显然,只有 $(i=4,j=8)$ 满足 $\text{cover}(i,j,u,v)=1$。此时 $f(i,j)=3$。 第二次是操作。将 $3$ 号节点的点权改为了 $2$。 第三次是询问。当 $i=4,j=3$ 时,$\text{cover}(i,j,u,v)=1$ 且 $f(i,j)=4$ 。不难发现,对于其他所有满足 $\text{cover}(i,j,u,v)=1$ 的节点对 $(i,j)$,均没有 $f(i,j) >4$。 【数据范围】 - Subtask1(8pts):$n,q\le50$; - Subtask2(12pts):$n,q\le2\times10^3$; - Subtask3(16pts):$n,q\le4\times10^4$; - Subtask4(10pts):保证树的形态随机生成; - Subtask5(12pts):保证没有 $1$ 操作; - Subtask6(12pts):保证每次询问的 $u,v$ 都是叶子节点; - Subtask7(30pts):无特殊限制。 Subtask4 的随机方式为 :随机生成一个的排列 $p$,对于 $i\in[2,n]$,$p_i$ 向 $p_1,p_2,...,p_{i-1}$ 中等概率随机的一个点连边。 对于 $100\%$ 的数据满足,$1\le n,q,a_i \le 10^5$,保证每次询问均满足 $u$ 不是 $v$ 的祖先且 $v$ 不是 $u$ 的祖先,且 $u \neq v$ 。