分散层叠学习小记

大概是处理这样一个问题:

给定 \(n\) 个长为 \(m\) 的序列 \(a_1,a_2,\cdots,a_n\),询问一个点 \(x\) 在所有序列中的前驱 / 后继,要求单次 \(O(n + \log m)\),预处理 \(O(nm)\),空间 \(O(nm)\)

预处理 \(b\)\(b_1=a_1\)\(b_i\)\(b_{i-1}\) 中偶数下标位置与 \(a_i\) 归并得到,容易证明单个 \(b_i\) 长度 \(\le 2m\)

以后继为例。

再预处理 \(b_i\) 中每个数其往后第一个在 \(b_{i-1}/a_i\) 中的数,查询时,我们想要知道所有 \(b_i\)\(x\) 的后继,继而可以通过预处理的信息得到 \(a_i\) 中的后继。

对于 \(b_n\) 我们直接二分,递推到 \(b_{i-1}\) 时我们取出预处理的 \(b_{i-1}\) 中的后继,发现最多往前移动一位(被删除的奇数位),于是可以单次 \(O(n + \log m)\)

posted @ 2026-01-07 22:30  lnw143  阅读(1)  评论(0)    收藏  举报