我做过的题里,都是读进来许多询问,之后节点总个数是O(N)的。 对每个询问,我们要将节点按dfs序排序,之后求出相邻两点的lca。 这两步都是nlogn的,也都可以离线做到O(n)。 排序,由于值域是1-n的,可以全部插到一个值域的数组里,记录是哪个询问的,再插回来就行了。 排完序后,哪些点需要求lca我们是知道的,于是可以用tarjan来求lca。