- 连续段:
r
−
l
=
m
x
−
m
n
r-l=mx-mn
r−l=mx−mn,比如 {2,4,3,5}是,{3,5},{2,4,3}不是.
- 性质1:一个点是连续段,一个排列也是(显然)
- 性质2:两个连续段的交必为连续段(感性)
- 本原段:一个连续段,不存在其他连续段和它相交确不包含
一个点表示一个本原段
-
合点:儿子按顺序递增或递减,比如
- 性质:任选两个点组成的区间也是连续段
-
析点:不是合点的点。
一个连续段在析合树上的存在形式:
- 单独一个点:析点或合点
- 合点的一段儿子区间(方案为 ( s z e 2 ) 2 \dfrac{\binom {sze}2}2 2(2sze))
因此就可以求一个数列连续段个数。
求一个区间的最小包含连续段
找出原树上两个点,找LCA
- 若LCA为析点,则这个点就是答案
- 如果为合点,我们找到对应的两个儿子,它们之间形成的区间就是答案
包含一段区间的连续段个数
显然可以预处理每个点被包含的连续段个数,也就是祖先个数+祖先中合点包括此点的区间数
对于当前查询区间,先前往LCA,如果是析点直接返回这个点的答案,如果是合点还要加上包含 两个儿子区间的答案
查询区间连续段个数
类似zkw,把信息存到链上,然后维护一下即可
构造待补