一些连续段的性质
连续段定义为序列的一个值域连续的子串。
连续段在排列上有一些性质,比如,连续段的并,交,差都仍然是连续段。
在排列上,区间 \([l,r]\) 是连续段的条件退化为 \(\max-\min=r-l\),也即 \(\max-\min+l-r=0\)。
这个式子对任意区间 \(\ge 0\),因此扫描线,单调栈维护极值,线段树维护最小值即可维护相关信息。
另一个方法是,区间 \([l,r]\) 内恰有 \(r-l\) 对 \((x,y)\) 满足 \(|a_x-a_y|=1\)。(\(l\le x\le y\le r\)
我们对 \(r\) 扫描线,维护 \(l\le x\le y\) 的 \((x,y)\) 的数量 \(c\)。
对每个合法对在 \(y\) 的位置对 \([1,x]\) 区间加,维护 \(l+c_l\) 的最大值,取得 \(r\) 时即 \([l,r]\) 为连续段。
可以认为是点边容斥的一种。
对于不是排列的序列,条件没有这么简单。
但我们仍可以 \(\mathcal O(1)\) check 区间是否是连续段:先要求 \(\max-\min=r-l\)。
然后对每个数随机赋权异或哈希即可。
本文来自博客园,作者:CuteNess,转载请注明原文链接:https://www.cnblogs.com/CuteNess/p/21634188
浙公网安备 33010602011771号