CF1083D The Fair Nut's getting crazy
题目描述
Fair Nut 发现了一个长度为 $n$ 的整数数组 $a$。我们称子数组 $l \ldots r$ 为数组中下标从 $l$ 到 $r$ 的一段连续元素,即 $a_l, a_{l+1}, a_{l+2}, \ldots, a_{r-1}, a_{r}$。
没人知道原因,但他称一对子段为“好对子”当且仅当满足以下条件:
1. 这两个子段不能嵌套。也就是说,每个子段都必须包含一个不属于另一个子段的元素(下标)。
2. 两个子段有交集,并且交集中的每个元素在每个子段中只出现一次。
例如,$a=[1, 2, 3, 5, 5]$。对子 $(1 \ldots 3; 2 \ldots 5)$ 和 $(1 \ldots 2; 2 \ldots 3)$ 是好对子,但 $(1 \ldots 3; 2 \ldots 3)$ 和 $(3 \ldots 4; 4 \ldots 5)$ 不是(子段 $1 \ldots 3$ 包含了 $2 \ldots 3$,整数 $5$ 同时属于两个子段,但在子段 $4 \ldots 5$ 中出现了两次)。
请你帮助 Fair Nut 计算好对子段的数量!由于答案可能很大,请输出对 $10^9+7$ 取模后的结果。
输入格式
第一行包含一个整数 $n$($1 \le n \le 10^5$),表示数组 $a$ 的长度。
第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($-10^9 \le a_i \le 10^9$),表示数组的元素。
输出格式
输出一个整数,表示好对子段的数量,对 $10^9+7$ 取模。
说明/提示
在第一个样例中,只有一对好子段:$(1 \ldots 2, 2 \ldots 3)$。
在第二个样例中,有四对好子段:
- $(1 \ldots 2, 2 \ldots 3)$
- $(2 \ldots 3, 3 \ldots 4)$
- $(2 \ldots 3, 3 \ldots 5)$
- $(3 \ldots 4, 4 \ldots 5)$
由 ChatGPT 4.1 翻译