#P12743. [POI 2016 R3] 勤奋的约翰尼 Diligent Johny

[POI 2016 R3] 勤奋的约翰尼 Diligent Johny

题目背景

翻译来自于 LibreOJ

题目描述

题目译自 XXIII Olimpiada Informatyczna — III etap Pracowity Jaś

今天是小 Johny 的生日……但这是一道严肃的算法题,可怜的 Johny 没有收到玩具、游戏或电脑作为礼物。相反,他得到了一堆充满数字的长数组、树形结构、遍布隧道和立交桥的奇异地图,以及长达 1048576 个符号的 Fibonacci 和 Thue-Morse 序列前缀等教育礼物。在这些礼物中,他最喜欢的是一个包含 11nn 的正整数排列的数组。很快,Johny 开始思考这个排列的字典序前驱排列†是什么。聪明如他,很快解决了这个问题,并立即想到如何通过数组支持的唯一操作——交换任意两个单元的内容——将当前排列转换为其前驱。Johny 发现这个任务如此引人入胜,以至于他不断将每个排列转换为其字典序前驱。

沉迷于排列变换的 Johny 完全忽略了生日派对的宾客。宾客们觉得这既有趣又有些失礼。很快,有人意识到 Johny 会在达到字典序最小的单位排列 1,2,,n1,2,\ldots,n 时停下来。问题在于,这需要多长时间?请帮助宾客们解答这个问题,假设每次交换耗时一秒。由于 Johny 极其勤奋,这个过程可能很长,宾客们只关心交换次数对 109+710^9+7 取模的结果。他们可以每隔 109+710^9+7 秒检查一次,看 Johny 是否终于完成了。

^\dagger对于排列 P=(p1,,pn)P = (p_1, \ldots, p_n)Q=(q1,,qn)Q = (q_1, \ldots, q_n),若在最小的满足 pjqjp_j \neq q_j 的索引 jj 处有 pj<qjp_j < q_j,则称 PP 在字典序上小于 QQ(记为 P<QP < Q)。若 P<QP < Q 且不存在排列 RR 满足 P<R<QP < R < Q,则称 PPQQ 的字典序前驱。

输入格式

第一行包含一个正整数 nn,表示 Johny 收到的排列长度。

第二行包含 nn 个互不相同的整数 p1,p2,,pnp_1, p_2, \ldots, p_n (1pin)(1 \leq p_i \leq n),表示排列的元素。

输出格式

输出一行,包含一个整数,表示 Johny 停止前进行的交换次数对 109+710^9+7 取模的结果。

3
3 1 2
6

提示

样例 1 解释

Johny 经历的字典序递减排列序列为 (3,1,2),(2,3,1),(2,1,3),(1,3,2),(1,2,3)(3,1,2), (2,3,1), (2,1,3), (1,3,2), (1,2,3)。为此,他总共进行了 2+1+2+1=62+1+2+1=6 次交换。

附加样例

  1. n=10n=10,排列为 1,2,3,,101,2,3,\ldots,10
  2. n=5n=5,一个随机 55 元素的排列。
  3. n=100n=100,排列为 100,99,98,,1100,99,98,\ldots,1

详细子任务附加限制及分值如下表所示。

子任务 附加限制 分值
11 n10n \leq 10 1515
22 n5000n \leq 5000 3737
33 n1000000n \leq 1000000,排列为 n,n1,,1n, n-1, \ldots, 1 1515
44 n1000000n \leq 1000000 3333