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 翻译