P8062 [BalkanOI 2012] handsome
题目背景
你是 OIer 中最帅的,所以你要做一道跟帅有关的题。
题目描述
一个 $N$ 位数是帅气的,当且仅当每一个数位上的数为 $1,2,3$ 中的一个。而且相邻的两个数位上的数字构成的有序数对不是“危险数对”。
- $N$ 位数 $X$ 在排列 $p$ 的意义下字典序小于 $N$ 位数 $Y$,当且仅当存在一个 $k$ 使得 $X_{p_1}=Y_{p_1},X_{p_2}=Y_{p_2},\dots,X_{p_{k}}Y_{p_{k}}$。
请你输出在排列 $p$ 意义下小于等于 $B$ 的帅气数的个数模 $10^9+7$ 的值。
输入格式
输入的第一行包含一个整数 $N$,表示数字位数。
第二行包含 $N$ 个空格分隔的整数,表示排列 $p$。该行的第 $i$ 个整数表示 $p_i$。
第三行包含一个整数 $M$,表示危险数对个数。
第四行 $M$ 个空格分隔的两位整数,第 $i$ 个两位整数 $\overline{a_ib_i}$ 表示 $(a_i,b_i)$ 为危险数对。
第五行一个正整数 $B$ 表示给定帅气数。
输出格式
输出一行,表示在排列 $p$ 意义下小于等于 $B$ 的帅气数个数模 $10^9+7$。
说明/提示
#### 数据范围:
Subtask#0 为样例。
$1\le N\le4\times10^5$,$M>0$,$a_i,b_i\in\{1,2,3\}$。
保证 $B$ 为帅气数。
#### 样例解释:
$113,122,131,132,133,213,221,222,223,313,322$ 不是帅气数,因为出现了危险数对 $(2,2)$ 或 $(1,3)$。
所以,所有 $3$ 位帅气数为:$
111,112,121,123,
211,212,231,232,233,
311,312,321,323,331,332,333$。
在排列 $2,1,3$ 意义下小于等于 $321$ 的帅气数有:$111,112,121,123,211,212,311,312,321$
如 $323$ 在排列 $2,1,3$ 意义下与 $321$ 比较(设 $323$ 为 $X$,$321$ 为 $Y$):
- 先比较第 $2$ 位:$X_2=Y_2=2$;
- 再比较第 $1$ 位:$X_1=Y_1=3$;
- 最后比较第 $3$ 位:$X_3=3>Y_3=1$。
所以 $323$ 在排列 $2,1,3$ 意义下大于 $321$,不是满足条件的帅气数。