#agc030d. [agc030_d]Inversion Sum

[agc030_d]Inversion Sum

题目描述

给定一个长度为NN的整数序列:A1,A2,...,ANA_1,A_2,...,A_N。按照顺序进行QQ次操作。第ii次操作由两个整数XiX_iYiY_i描述。在这个操作中,我们将选择以下两个动作之一并执行它:

  • 交换AXiA_{X_i}AYiA_{Y_i}的值
  • 什么也不做

总共有2Q2^Q种方法来执行这些操作。计算所有这些操作所产生的最终序列的逆序数之和,对109+710^9+7取模。

这里,序列P1,P2,...,PMP_1,P_2,...,P_M的逆序数是满足1leqi<jleqM1\\leq i < j\\leq MPi>PjP_i > P_j的整数对(i,j)(i,j)的数量。

约束条件

  • 1leqNleq30001 \\leq N \\leq 3000
  • 0leqQleq30000 \\leq Q \\leq 3000
  • 0leqAileq109(1leqileqN)0 \\leq A_i \\leq 10^9(1\\leq i\\leq N)
  • 1leqXi,YileqN(1leqileqQ)1 \\leq X_i,Y_i \\leq N(1\\leq i\\leq Q)
  • XineqYi(1leqileqQ)X_i\\neq Y_i(1\\leq i\\leq Q)
  • 输入中的所有值均为整数。

输入

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

NN QQ A1A_1 :: ANA_N X1X_1 Y1Y_1 :: XQX_Q YQY_Q

输出

输出最终序列的逆序数之和,对109+710^9+7取模。

样例输入 1

3 2
1
2
3
1 2
1 3

样例输出 1

6

有四种操作方式:

  • 在第一次和第二次操作中都什么也不做。最终序列将是1,2,31,2,3,逆序数为00
  • 在第一次操作中什么也不做,在第二次操作中执行交换。最终序列将是3,2,13,2,1,逆序数为33
  • 在第一次操作中执行交换,在第二次操作中什么也不做。最终序列将是2,1,32,1,3,逆序数为11
  • 在第一次和第二次操作中都执行交换。最终序列将是3,1,23,1,2,逆序数为22

这些逆序数的和为0+3+1+2=60+3+1+2=6

样例输入 2

5 3
3
2
3
1
4
1 5
2 3
4 2

样例输出 2

36

样例输入 3

9 5
3
1
4
1
5
9
2
6
5
3 5
8 9
7 9
3 2
3 8

样例输出 3

425