问题 6031 --重排计数 (count)

6031: 重排计数 (count)★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 58  解决: 14
[提交][状态][命题人:]

题目描述

      给定一个长度为 n 的排列 p 和一个长度为 n 的数组 q 。你可以进行如下操作任意多次(包括 0 次):选择两个下标 i,j,交换pi和pj。

      求有多少种操作完后的排列满足 p 中的每个位置小于等于 q 中的对应位置。即,对于任意i(1<=i<=n), pi<=qi。你需要输出总数对10^9+7取模后的结果。

输入

第一行一个整数 n

第二行 n 个互不相同的整数,代表排列 p

第三行 n 个整数,代表数组 q

输出

一行一个整数,表示答案对10^9+7取模后的结果。
样例输入
Copy
4
4 3 2 1
4 4 2 2
样例输出
Copy
4

提示

样例2输入

5

1 2 3 4 5

1 1 3 5 5

样例2输出

0

样例1说明:

共有四种满足条件的排列:

1.  不进行任何操作得到[4,3,2,1]

2.  交换第1个位置和第2个位置得到[3,4,2,1]

3.  交换第3个位置和第4个位置得到[4,3,1,2]

4.  交换第1个位置和第2个位置,再交换第3个位置和第4个位置得到[3,4,1,2]


数据范围:

对于40%的数据,n<=10

对于50%的数据,n<=20

对于60%的数据,n<=10^3

对于另外20%的数据,数组 q 中整数互不相同。

对于所有数据,1<=n<=10^5,1<=pi,qi<=n

来源

[提交][状态]