因为孙✌抱怨给小朋友准备的题目过于简单,突发奇想想到了这个题。
考虑使用 ETT 来维护子树移动。即直接维护树的欧拉环游序。
那么一次移动相当于是一个区间被移动到了另一个位置。
这个可以用平衡树来维护,同时需要区间加区间 $\max$。
如果精细实现的话复杂度 $O(n+q\log n)$。但是比较懒没有卡 $O((n+q)\log n)$。
同时可以发现其实即使 $v$ 在 $u$ 的子树内也是可以交换的,只不过较为繁琐。
本来想卡块状链表但平衡树常数太大,不一定卡的掉。
由于深度的差分数组只存在 $1,-1$,因此对于 $10^5$ 的做法也许可以用 bitset 维护。
1 | #include<bits/stdc++.h> |

