#P6999. *【树上点差分+线段树合并】树上点修改和路径查询This Problem Is Too Simple!

*【树上点差分+线段树合并】树上点修改和路径查询This Problem Is Too Simple!

【题目描述】

给您一颗树,每个节点有个初始值。

现在支持以下两种操作:

  • C i x(0x<231)\texttt{C}~i~x(0\le x<2^{31}) 表示将 ii 节点的值改为 xx
  • Q i j x(0x<231)\texttt{Q}~i~j~x(0\le x<2^{31}) 表示询问 ii 节点到 jj 节点的路径上有多少个值为 xx 的节点。

【输入格式】

第一行有两个整数 N,Q(1N105,1Q2×105)N,Q(1\le N\le 10^5,1\le Q\le 2\times 10^5),分别表示节点个数和操作个数。

下面一行 NN 个整数,表示初始时每个节点的初始值。

接下来 N1N-1 行,每行两个整数 x,yx,y,表示 xx 节点与 yy 节点之间有边直接相连(描述一颗树)。

接下来 QQ 行,每行表示一个操作,操作的描述已经在题目描述中给出。

【输出格式】

对于每个 QQ 输出单独一行表示所求的答案。

【样例输入】

5 6
10 20 30 40 50
1 2
1 3
3 4
3 5
Q 2 3 40
C 1 40
Q 2 3 40
Q 4 5 30
C 3 10
Q 4 5 30

【样例输出】

0
1
1
0