UOJ Logo Zijian Online Judge

ZOJ

#12. 种树

统计

某天,小 D 突然意识到,搞 OI 不如种田。

于是他兴奋地跑回家,却发现他不仅不会种田,而且连种田的地都没有。

无奈之下,小 D 决定在家门口挖个坑,种一棵树,毕竟他搞 OI 的时候接触过一点点树的那套理论。

为了体现他是学过 OI 的文化人,他决定种他学过的最难的树——平衡树!一般说来,平衡树是一类二叉搜索树(BST),而二叉搜索树的特点是根节点的左右子树都是二叉搜索树或空树,并且左子树中的节点权值小于根节点权值,右子树中的节点权值大于根节点权值,平衡树在此基础上利用旋转等方式使树的结构相对平衡,增加查找效率。

可惜的是小 D 连平衡树都种不清楚,于是他种了一棵裸裸的 BST,并买了几包 BST 专用版金坷垃送给土地神请他多多关照。不久后,BST 茁长成长,小 D 望着绿油油的 BST 感觉浑身舒服,估计再长不久就有隔壁家的灌木丛高啦!但敏锐的他突然发现了不对:只有一部分的节点是发育正常的,还有一部分都快枯死了!小 D 马上找到土地神理论,是不是他往金坷垃里掺了假,没想到却被土地神怒斥道:“你个弱菜,BST 都不会种,金坷垃也救不了你!”

小 D 赶忙回头看了看自己种的树,发现好像确实连 BST 都不是,只是棵普通的带权二叉树……

BST 专用版金坷垃是这样工作的,首先我们认为 BST 上节点的权值互不相同(很可惜是小 D 种的很可能不满足),每种权值都对应一种肥料,所有肥料一开始都会流到根节点($1$ 号节点),如果一种肥料遇到了与它对应的节点,就会被吸收;否则若该肥料权值小于当前节点,肥料会流向左儿子,反之流向右儿子,如果没有要流向的儿子,那么这种肥料只好流失蒸发了。我们知道如果这棵树是 BST,那么所有节点都能吸收到肥料,但一棵普通二叉树就难了。

小 D 感觉自己还能抢救一下,他打算修改若干个节点的权值,另外因为有可能是自己种树时弄错了左右子树,他还希望能支持子树翻转(子树内所有节点左右儿子互换),为了参考自己修改的好不好,他在修改时有时候会想知道某个节点能否吸收到肥料,他当然不会做啦,你帮帮他呗。

输入格式

第一行两个正整数 $n, m$,分别表示二叉树的节点个数和操作数。

接下来 $n$ 行,每行三个非负整数,其中第 $i$ 行第一个数代表第 $i$ 个节点(节点编号 $1-n$)的权值,后两个数分别表示第 $i$ 个节点的左右儿子,如果没有某个儿子则为 $0$;

最后 $m$ 行,每行代表一个操作,每行先给出两个正整数 $opt$ 和 $x$,

若 $opt=1$,接下来还会有一个正整数 $y$,表示把节点 $x$ 的权值修改为 $y$;

若 $opt=2$,表示翻转以 $x$ 为根的子树;

若 $opt=3$,表示询问节点 $x$ 是否能吸收到肥料。

输出格式

对于每一个询问,输出一行 $\texttt{YES}$ 或 $\texttt{NO}$ 表示答案。

样例

input

3 7
10 2 3
5 0 0
5 0 0
3 1
3 2
3 3
1 3 100
3 3
2 1
3 3

output

YES
YES
NO
YES
NO

限制与约定

对于所有数据,$n,m \leq 100000$,节点权值在 $[1, 10^9]$ 之间,数据保证合法;

对于 $20\texttt{%}$ 的数据,$n,m \leq 5000$;

对于另外 $30\texttt{%}$ 的数据,保证 $opt \neq 2$。

时间限制:$1\texttt{s}$

空间限制:$256\texttt{MB}$