#agc023e. [agc023_e]Inversions

[agc023_e]Inversions

题目描述

Snuke 有一个整数序列 AA,其长度为 NN。他喜欢满足以下条件的置换 (1,2,...,N)(1, 2, ..., N)PP

  • 对于所有 ii1iN1 \leq i \leq N),有 PiAiP_i \leq A_i

Snuke 对满足这个条件的置换的逆序数很感兴趣。求满足条件的所有置换的逆序数之和。由于结果可能非常大,计算结果模 109+710^9+7

注解

长度为 NN 的序列 ZZ 的_逆序数_是对于所有整数对 (i,j)(i, j)1i<jN1 \leq i < j \leq N),满足 Zi>ZjZ_i > Z_j 的个数。

约束条件

  • 1N2×1051 \leq N \leq 2 \times 10^5
  • 1AiN1 \leq A_i \leq N1iN1 \leq i \leq N
  • 输入中的所有值都是整数。

输入格式

从标准输入读入数据,格式如下:

NN A1A_1 A2A_2 ...... ANA_N

输出格式

输出满足条件的所有置换的逆序数之和。


示例输入 1

3
2 3 3

示例输出 1

4

有四个满足条件的置换:(1,2,3)(1,2,3)(1,3,2)(1,3,2)(2,1,3)(2,1,3)(2,3,1)(2,3,1)。这些置换的逆序数分别为 00111122,因此总和为 44


示例输入 2

6
4 2 5 1 6 3

示例输出 2

7

只有一个满足条件的置换 (4,2,5,1,6,3)(4,2,5,1,6,3)。这个置换的逆序数是 77,因此答案是 77


示例输入 3

5
4 4 4 4 4

示例输出 3

0

没有满足条件的置换。


示例输入 4

30
22 30 15 20 10 29 11 29 28 11 26 10 18 28 22 5 29 16 24 24 27 10 21 30 29 19 28 27 18 23

示例输出 4

848414012