P6292
考虑建出 SAM 后扫描线。
考虑目前一个等价类集合长度区间为 \([l,r]\),显然我们扫到每个位置的时候只需要维护每个等价类的 \(\operatorname{Endpos}\) 集合中最靠右的位置。我们考虑右端点增加 \(1\) 的时候,会被修改的等价类为目前前缀对应的等价类 Fail 树上到根的路径。对于一个 \(l,r,x\),其中 \([l,r]\) 为长度区间,\(x\) 为 \(\operatorname{Endpos}\) 等价类最大值,则对于询问的左区间来说,答案构成分段一次函数。最终每个左区间答案都是关于左区间线性的,维护两个树状数组分别是斜率和截距即可。到根链覆盖直接树剖后 ODT 即可,复杂度 \(O(n \log^2 n)\)。
P11830
考虑怎么判定 \(x\) 是否可以成为中位数。
对于 \(l_{i,2}\leq x\leq r_{i,2}\) 的 \(i\),显然会取 \(r_{i,1}\) 个 \(x\),否则所有 \(r_{i,2} < x\) 的 \(i\) 都本质相同,\(l_{i,2} > x\) 的 \(i\) 也相同,于是可以得到两个区间分别表示 \(<x\) 和 \(>x\) 的数的个数在这个范围内,对这个东西解方程就能求出对应范围了。
值域很大,离散化后每段本质相同,双指针后判断即可。复杂度 \(O(n \log n)\)。