YC256C [ 20240312 CQYC省选模拟赛 T3 ] ciallo
题意
给定一棵树。
求对于点 \(x\) \(dis(x, y) < l_i, dis(x, y) > r_i\) 的点组成的线性基内是否存在值 \(w\)。
Sol
很牛魔的线性基入门题,卡了我两天。
首先容易想到用线段树来维护线性基。
但是这样是 \(\log ^ 3\) 的。
有一个东西,叫前缀线性基。
什么意思呢,就是在原版的线性基基础上,用另一维,来维护区间的右端点。
比如这道题,添加一个 \(p'\) 表示距离当前根的深度。
这个东西可以在插入时维护。
具体地:
- 如果当前没有第 \(i\),直接插入基。
- 否则判断当前地 \(p'\),取更大/更小的,直接交换两者即可。
- \(x = x \oplus p[i]\)。
对于这道题,直接用两个前缀线性基维护即可。
套个换根,复杂度瓶颈在于合并。
\(O(n \log ^ 2 n)\)