"为了打好数据结构基本功,深入理解数据结构精神,贯彻落实代码实现工作,我们需要努力学习数据结构的深刻内涵……"
ACM训练基地在开会,可是只听了两句之后猫猫虫就睡了过去,醒来的他面对留下的课后作业感到不知所措,幸运的是,他认识一个数据结构大神,那就是你!为了不让可怜的猫猫虫被学长责罚,你决定帮助他完成数据结构作业。
作业题目如下:
给定一棵以$$$1$$$号点为根节点的树,树上每个点有点权$$$a_i\in \{0,1\}$$$,接下来你需要进行$$$q$$$次操作,操作共分为两种:
其中$$$\oplus$$$代表按位异或,即C语言中的位运算符^。
$$$lca(x,y)$$$指$$$x$$$和$$$y$$$两个点的最近公共祖先,如样例3中,$$$lca(4,5)=3$$$。
第一行两个整数$$$n,q(2\leq n \leq 3\times 10^5,1\leq q\leq 3\times 10^5)$$$,代表树上点数和操作数。
第二行$$$n$$$个整数$$$a_i(a_i\in\{0,1\})$$$,代表初始点权。
第三行$$$n-1$$$个整数,第$$$i$$$个整数为$$$f_i(1\leq f_i\leq i)$$$,代表第$$$i+1$$$个点和第$$$f_i$$$个点之间有一条边。
接下来$$$q$$$行,每行为一个操作:
对于每个操作,每行第一个整数为$$$op(op \in\{1,2\})$$$,代表操作类型。
对于每个询问,输出一行一个整数代表这次询问的答案。
2 1 0 0 1 2 1
1
3 3 0 0 1 1 1 2 1 1 1 2 1 2 1
1 0
5 5 1 0 0 1 1 1 1 3 3 1 5 4 1 1 2 4 0 2 3 1 2 1 1 2 1
1 5
对于样例3,第一次询问时,经过前两次覆盖之后的树点权为$$$\{0,0,0,0,1\}$$$,子树3中合法的点对为$$$(3,4)$$$。
第二次询问时,经过前三次覆盖之后的树点权为$$$\{1,1,0,0,1\}$$$,子树1中合法的点对为$$$(1,3),(1,4),(2,3),(2,4),(3,4)$$$ 。