Luogu5070 [Ynoi2015] 即便看不到未来

题意:给出长度为 的序列

每次查询区间 中长度为 的极长值域连续段个数。

其中,集合 的值域连续段定义为:将 排序后,存在 的值是连续的,称 为一个值域连续段。

允许离线,,时限


显然不是根号做法,又允许离线,考虑扫描线。逐步增大右端点 ,维护每个左端点的答案。

考虑所有右端点恰为 的区间的贡献。

上一次出现的位置为

对于 中已经存在,故答案不变。

对于 $$

对于确定的区间 ,查询出 向前连续达到的最小数 ,向后连续达到的最大数 ,则原先的两个极长连续段是 ,现在合成为

对于每个 都处理显然不可承受,考虑利用 很小的性质。

我们只需要关心 中的数值。

表示区间 对应的 ,若 则只需记为

利用 容易求出各个 ,分成了 段。

对于每一段,贡献模式是确定的,用树状数组维护。

复杂度