树上一条链中挑选出某些数 异或和最大。
显然维护线性基,线段树维护线性基暴力合并过于复杂。
考虑维护每个结点到根的线性基。根据求区间线性基的方法。链上记录基内某个基的最大的深度,然后取$[x,lca(x,y)]$和$[y,lca(x,y)]$,进行取该可以取的元素,合并起来。1
2
3if (po > pos[i])
swap(x, p[i]), swap(po, pos[i]);
x ^= p[i];
复杂度$O(n\log^2 n +q \log ^2n)$
代码
1 |
|
树上一条链中挑选出某些数 异或和最大。
显然维护线性基,线段树维护线性基暴力合并过于复杂。
考虑维护每个结点到根的线性基。根据求区间线性基的方法。链上记录基内某个基的最大的深度,然后取$[x,lca(x,y)]$和$[y,lca(x,y)]$,进行取该可以取的元素,合并起来。1
2
3if (po > pos[i])
swap(x, p[i]), swap(po, pos[i]);
x ^= p[i];
复杂度$O(n\log^2 n +q \log ^2n)$
1 |
|