题解:
用Splay维护欧拉序。
欧拉序有如下性质:
1.深度随着距离加减一。
2.两点间(任意出入栈序)的深度最小值为lca的深度加一。
3.出入栈之间为整个子树。
有了如上性质,直接维护欧拉序即可。注意三操作可以直接在Splay 上二分从而少一个 logn log n 。
#include <bits/stdc++.h>
using namespace std;
inline int rd() {
char ch=getchar(); int i=0,f=1;
while(!isdigit(ch)) {
if(ch=='