观察发现,如果 i , j ( i < j ) i,j(i<j) i,j(i<j)连通,那么对于任意的 k ∈ ( i , j ) k\in (i,j) k∈(i,j), k k k与 i , j i,j i,j连通。
证明:考虑连通块中从 i i i到 j j j的一条路径,若 k k k在这条路径上结论显然成立;否则,这其中必定存在一条边 ( u , v ) (u,v) (u,v)满足 u < k < v u < k < v u<k<v,由于 a u < a v a_u < a_v au<av,所以 a u < a k ∨ a k < a v a_u < a_k \vee a_k< a_v au<ak∨ak<av一定成立。
所以,连通块一定是序列上的一段连续的区间。
将问题转化成:计算有多少个 p p p,满足 [ 1 , p ] [1,p] [1,p]和 [ p + 1 , n ] [p+1,n] [p+1,n]之间没有边。而这个限制条件也等价于 ∀ x ∈ [ 1 , p ] , y ∈ [ p + 1 , n ] , a x > a y \forall x\in [1,p], y\in [p+1,n], a_x > a_y ∀x∈[1,p],y∈[p+1,n],ax>ay。
考虑枚举 [ p + 1 , n ] [p+1,n] [p+1,n]中的最大值 v v v,记序列中小于等于 v v v的值为 0 0 0,大于 v v v的值为 1 1 1,则 p p p合法的条件就是整个序列形如 111 ⋯ 111 ⏞ p个1 000 ⋯ 000 \overbrace{111\cdots 111}^{\text{p个1}}000\cdots 000 111⋯111 p个1000⋯000。
发现对于每个 v v v而言,它对应的 01 01 01序列是确定的,也就是说尽管一个 v v v可以对应多个 p p p,但是这些 p p p中至多只有一个合法。
所以我们不妨直接统计有多少个 v v v对应的 01 01 01序列形如 111 ⋯ 111000 ⋯ 000 111\cdots 111000\cdots 000 111⋯111000⋯000。
为了方便处理,我们令 a 0 = + ∞ , a n + 1 = − ∞ a_0 = + \infty, a_{n+1} = -\infty a0=+∞,an+1=−∞
用线段树维护对每一个 v v v维护它对应的 01 01 01序列中相邻的 10 10 10对的数量,以及 v v v是否作为序列中的某个元素出现。由于 10 10 10对的数量至少有一个,所以维护最小值以及最小值的数量,即可得到合法的 v v v的数量。