#P5314. [Ynoi2011] ODT

[Ynoi2011] ODT

题目背景

【先咕咕咕

题目描述

给你一棵树,边权为 11,有点权。

需要支持两个操作:

  • 1 x y z:表示把树上 xxyy 这条简单路径的所有点点权都加上 zz
  • 2 x y:表示查询与点 xx 距离小于等于 11 的所有点里面的第 yy 小点权。

输入格式

第一行两个整数 n,mn,m

第二行 nn 个整数表示每个点的点权。

之后 n1n-1 行,每行两个整数 x,yx,y 表示 xxyy 之间连有一条边。

之后 mm 行,每行为 1 x y z 或者 2 x y 形式,意义如上述。

输出格式

对每个 2 操作输出一行,每行一个整数表示答案。

数据保证每次询问都存在答案。

5 5
3 4 3 1 3
1 2
1 3
2 4
3 5
2 1 3
2 1 1
1 1 1 1
2 1 3
1 4 1 1

4
3
4

提示

Idea:nzhtl1477,

Solution:nzhtl1477( O(nlog2n/loglogn)O( n\log^2n/ \log\log n ) solution ),negiizhao( O(nlognlogloglogn)O( n\log n\log\log\log n ) solution ),ccz181078( O(nlogn)O( n\log n ) solution ),

Code:nzhtl1477( O(nlog2n/loglogn)O( n\log^2 n/ \log\log n ) code )

Data:nzhtl1477( partially uploaded )

subtask 1:20%20\% n,m1000n,m\leq 1000

subtask 2:10%10\% 树为一条链。

subtask 3:20%20\% n,m105n,m\leq 10^5

subtask 4:30%30\% n,m4×105n,m\leq 4\times 10^5

subtask 5:20%20\% n,m106n,m\leq 10^6

对于 100%100\% 的数据,1n,m1061\leq n,m\leq 10^600\leq 每次加的数 2000\leq 200000\leq 初始的点权 2000\leq 2000