P14534 [RMI 2018] W
题目背景
翻译来自于 [LibreOJ](https://loj.ac/p/5129)。
题目描述
**题目译自 [Romanian Master of Informatics 2018](https://rmi.lbi.ro/rmi_2018/) Day2 T3 「[W](https://rmi.lbi.ro/rmi_2018/_dwl/public.zip)」**
一个数字数组如果满足以下条件,就被称为 W 形数组:
1. 它由四个段组成,依次为:递减、递增、递减、递增。
2. 排序非严格,即递增和递减段可能包含连续的相等元素。
3. 每两个连续段共享一个公共端点。
4. 每个段至少包含两个不同值。
例如,数组 $(3, 1, 2, 1, 1, 4)$ 是 W 形的,分为段 $(3, 1)$、$(1, 2)$、$(2, 1, 1)$、$(1, 4)$。而数组 $(3, 1, 2, 2, 2, 4)$ 不是 W 形的,因为虽然可以分为 $(3, 1)$、$(1, 2)$、$(2, 2, 2)$、$(2, 4)$,但段 $(2, 2, 2)$ 不包含两个不同值。
给定一个包含 $N$ 个整数的数组,你需要计算有多少个不同的 W 形排列?两个排列 $(p_1, p_2, \ldots, p_N)$ 和 $(q_1, q_2, \ldots, q_N)$ 若存在某个位置 $1 \leq i \leq N$ 使得 $p_i \neq q_i$,则视为不同。在上述例子中,$(3, 1, 2, 1, 1, 4)$ 只计数一次,因为三个 $1$ 的内部排列不产生不同的排列。
输入格式
第一行包含一个整数 $N$。第二行包含 $N$ 个空格分隔的整数,表示数组的值。
输出格式
输出一个整数,表示不同的 W 形排列数量,对 $1000000007$ 取模。
说明/提示
### 样例 1 解释
在第一个样例中,输入数组为 $(3, 1, 4, 2, 3)$,共有 $6$ 个不同的 W 形排列:
- $(3, 1, 3, 2, 4)$
- $(3, 1, 4, 2, 3)$
- $(3, 2, 3, 1, 4)$
- $(3, 2, 4, 1, 3)$
- $(4, 1, 3, 2, 3)$
- $(4, 2, 3, 1, 3)$
### 数据范围
对于所有输入数据,满足:
- $5 \leq N \leq 300000$
- 数组值是介于 $[1, 1000000]$ 之间的整数
每个测试点将单独评分。
| 子任务 | 分值 | 附加限制 |
| :----: | :----: | :-------: |
| $1$ | $20$ | $N$ 个元素中只有两种不同值 |
| $2$ | $30$ | $N$ 个元素的值互不相同 |
| $3$ | $50$ | 无附加限制 |