luogu#P11319. [NOISG2020 Qualification] Cryptography

[NOISG2020 Qualification] Cryptography

题目背景

Charles 是一位密码学家,他正在研究生成随机数的新方法。他试图通过组合多个随机数源来创建一个密码学安全的伪随机数生成器(CSPRNG)。

题目描述

他发明了一种算法,包括以下步骤:

  1. 随机生成一个长度为 NN 的正整数序列 SS,其中元素两两不同。
  2. 随机打乱 SS,得到一个长度为 NN 的排列 PP
  3. 计算排列 PP 的字典序排名。
  4. 输出排名对 109+710^9 + 7 取模的结果。

排列 PP 的字典序排名定义为所有小于等于 PP 的排列数量。

Charles 是一位密码学家,但不是程序员。现在,给定排列 PP,请帮助 Charles 计算其字典序排名,并对 109+710^9 + 7 取模。

输入格式

第一行包含一个整数 NN,表示排列的长度。
第二行包含 NN 个正整数 P1,P2,,PNP_1, P_2, \dots, P_N,表示排列 PP

输出格式

输出一个整数,表示排列 PP 的字典序排名,对 109+710^9 + 7 取模。

3
42 100 1
4
5
1 5 2 4 3
20
2
2 1
2

提示

【样例解释】

对于样例 #1,以下是所有排列的字典序:

  1. [1,42,100][1, 42, 100]
  2. [1,100,42][1, 100, 42]
  3. [42,1,100][42, 1, 100]
  4. [42,100,1][42, 100, 1]
  5. [100,1,42][100, 1, 42]
  6. [100,42,1][100, 42, 1]

排列 [42,100,1][42, 100, 1] 的字典序排名为 44

【数据范围】

  • 1N3×1051 \leq N \leq 3 \times 10^5
  • 1Pi1091 \leq P_i \leq 10^9
  • 对于任意 iji \neq jPiPjP_i \neq P_j
子任务编号 分值 限制条件
11 55 N=2N = 2
22 99 1N81 \leq N \leq 8
33 1010 PP 为严格递增或递减
44 1111 P=[k,1,,k1,k+1,,N]P = [k, 1, \dots, k-1, k+1, \dots, N]1kN1 \leq k \leq N
55 2121 1N3×103,1PiN1 \leq N \leq 3 \times 10^3, 1 \leq P_i \leq N
66 1313 1N3×1031 \leq N \leq 3 \times 10^3
77 1919 1PiN1 \leq P_i \leq N
88 1212 无其他特殊限制