#DMY25S1903. 排列

排列

排列

文件与限制

输入文件:perm.in;输出文件:perm.out。

时间限制:3 秒;空间限制:128 MiB。使用 C++14 O2。

题目描述

小 L 有一个 11 到 nn 的排列 p1,p2,…,pnp_1,p_2,\ldots,p_n。

每次操作,可以将相邻两个数替换成它们的较小值,序列长度因此减少 11。

进行任意次操作(可以为零次)后,一共可以得到多少种不同的序列?两个结果只要长度不同,或者某个位置的值不同,就视为不同序列。

答案对 109+710^9+7 取模。

输入格式

第一行一个整数 nn。第二行 nn 个整数,表示排列。

输出格式

输出一个整数,表示答案对 109+710^9+7 取模的结果。

样例 1

4
2 3 1 4
6

可以得到 {1}\{1\}、{2,1}\{2,1\}、{1,4}\{1,4\}、{2,1,4}\{2,1,4\}、{2,3,1}\{2,3,1\}、{2,3,1,4}\{2,3,1,4\} 六种序列。

样例 2、3

见附加文件 samples.zip 中的 ex_perm2.in/out、ex_perm3.in/out。

数据范围

对于全部数据,1≤n≤2×1061\le n\le2\times10^6,输入为 11 到 nn 的排列。

测试点 额外限制
1~2 n≤10n\le10
3~4 n≤1000n\le1000
5~6 n≤3×105n\le3\times10^5,且 pi=ip_i=i
7~8 n≤3×105n\le3\times10^5
9~10 无