题目描述
译自 BalkanOI 2023 Day1 T3「Permutations」
给你一个由数字 1,2,…,n 组成的排列 p1,p2,…,pn。你需要回答 q 个查询。
第 i (1≤i≤q) 个查询由两个数字 Li,Ri (1≤Li≤Ri≤n) 表示。你需要回答满足以下条件的排列个数:
- 排列的长度为 n;
 
- 以序列 $p_{L_{i}}, p_{L_{i}+1}, \ldots, p_{R_{i}-1}, p_{R_{i}}$ 作为开头;
 
- 排列的最长递减子序列的长度至多为 2。
 
由于答案可能很大,输出它们对 109+7 取模的结果。
对于一个序列 a1,a2,…,ak,它的最长递减子序列的长度是最大的整数 t,使得存在 t 个下标 s1,s2,…,st,满足 1≤s1<s2<…<st≤k 且 as1>as2>…>ast。
输入格式
第一行包含一个整数 n。
第二行包含 n 个整数 p1,…,pn,即区间 [1,n] 中的 n 个不同的整数。
第三行包含一个整数 q。
接下来的 q 行每行描述了一个查询。第 i (1≤i≤q) 行包含两个整数字 Li 和 Ri。
输出格式
对于每个查询输出单独的一行,表示打印排列的个数对 109+7 取模的结果。
5
4 2 1 5 3
4
1 1
2 3
2 4
1 3
4
5
1
0
提示
样例解释
对于第一个查询,考虑到有四个序列 ⟨1,2,3,4,5⟩ 的排列以 4 开始,并且它们的最长递减子序列的长度至多为 2。这些排列是:
- ⟨4,1,2,3,5⟩;
 
- ⟨4,1,2,5,3⟩;
 
- ⟨4,1,5,2,3⟩;
 
- ⟨4,5,1,2,3⟩。
 
数据范围
对于所有输入数据,满足:
- 1≤n≤3⋅105
 
- 1≤q≤3⋅105
 
详细子任务附加限制及分值如下表所示。
| 子任务编号 | 
附加限制 | 
分值 | 
| 1 | 
n≤10,q≤10 | 
6 | 
| 2 | 
n≤1000,q≤1000,每个查询的区间内都包含 pj=n | 
7 | 
| 3 | 
每个查询的区间内都包含 pj=n | 
9 | 
| 4 | 
n≤1000,q≤1000,pi=i (1≤i≤n),Lj=1 (1≤j≤q) | 
12 | 
| 5 | 
pi=i (1≤i≤n),Lj=1 (1≤j≤q) | 
18 | 
| 6 | 
n≤1000,q≤1000 | 
12 | 
| 7 | 
无附加限制 | 
36 |