#abc468c. Between P and Q

    ID: 4370 Type: Default 1000ms 256MiB Tried: 0 Accepted: 0 Difficulty: 3 Uploaded By: Tags>普及/提高-康托展开排列组合数学

Between P and Q

题目描述

给定整数 NN,以及两个 (1,2,,N)(1, 2, \ldots, N) 的排列 P=(P1,P2,,PN)P = (P_1, P_2, \ldots, P_N)Q=(Q1,Q2,,QN)Q = (Q_1, Q_2, \ldots, Q_N)

请求出有多少个 (1,2,,N)(1, 2, \ldots, N) 的排列,按字典序严格大于 PP 且严格小于 QQ

什么是字典序?

对两个整数序列 SSTT,称 SS 字典序小于 TT,当且仅当下面两条之一成立:

  1. S<T|S| < |T|SSTT 的前缀,即 (S1,,SS)=(T1,,TS)(S_1, \ldots, S_{|S|}) = (T_1, \ldots, T_{|S|})
  2. 存在整数 1imin(S,T)1 \le i \le \min(|S|, |T|),使得 (S1,,Si1)=(T1,,Ti1)(S_1, \ldots, S_{i-1}) = (T_1, \ldots, T_{i-1})Si<TiS_i < T_i

通俗地说,就是像查字典一样,从左往右逐位比较,第一个不同的位置谁小谁就小

输入格式

N
P_1 P_2 ... P_N
Q_1 Q_2 ... Q_N

输出格式

输出满足条件的排列个数。

输入示例 1

3
1 3 2
3 1 2

输出示例 1

2

示例 1 说明

N=3N = 3 的全部 66 个排列按字典序排列为:

$$(1,2,3) < (1,3,2) < (2,1,3) < (2,3,1) < (3,1,2) < (3,2,1)$$

严格夹在 P=(1,3,2)P = (1,3,2)Q=(3,1,2)Q = (3,1,2) 之间的是 (2,1,3)(2,1,3)(2,3,1)(2,3,1),共 22 个。

输入示例 2

5
5 4 2 1 3
5 1 2 3 4

输出示例 2

0

示例 2 说明

这里 QQ 的字典序其实PP 还小(第 221<41 < 4),所以不存在夹在中间的排列,输出 00注意题目并没有保证 P<QP < Q

输入示例 3

7
3 6 5 2 7 1 4
4 1 5 7 2 3 6

输出示例 3

223

示例 3 说明

N=7N = 7 时全部排列共 7!=50407! = 5040 个。P=(3,6,5,2,7,1,4)P = (3,6,5,2,7,1,4) 的字典序排名与 Q=(4,1,5,7,2,3,6)Q = (4,1,5,7,2,3,6) 的排名相差 224224,减去 PP 自己这一个,得到夹在中间的有 223223 个。

这组数据说明:NN 稍大时答案会迅速变大,必须用排名相减而不是逐个枚举比较。

约束条件

  • 1N101 \le N \le 10
  • PPQQ 都是 (1,2,,N)(1, 2, \ldots, N) 的排列
  • 所有输入值均为整数