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)\)

posted @ 2024-03-14 19:56  cxqghzj  阅读(3)  评论(0编辑  收藏  举报