P13730 【MGVOI R1-B】完美重排(sort)
题目描述
Siby 同学有一个长度为 $n$ 的数组 $a$,其下标编号为 $1 \sim n$。保证数组 $a$ 是一个长度为 $n$ 的排列,也就是说,$1\sim n$ 中的每个正整数都在数组 $a$ 中出现 **恰好一次**。
在此基础上,Siby 同学定义了 **完美重排** 操作:
::::info[完美重排的定义]{open}
* 第一步:选择两个下标 $L,R$(必须满足 $1\le L\le R\le n$);
* 第二步:将 $a_L,...,a_R$ (即数组 $a$ 中下标在 $L$ 和 $R$ 之间的元素)按照 **从小到大** 的顺序重新排序。
::::
例如,若 $a=[4,3,2,1]$,选择 $L=2,R=4$ 进行一次完美重排操作(也就是将 $a_2,a_3,a_4$ 按照从小到大的顺序排序),得到的新数组为 $a'=[4,1,2,3]$。
接下来,他将进行 $Q$ 组询问(询问之间彼此独立),其中第 $i$ 组询问包含两个参数 $x_i,y_i$($x_i< y_i$),表示询问你有多少种进行 **恰好一次** 完美重排的方案,使得数组 $a$ 中原先下标为 $x_i$ 的元素,在重排后的下标为 $y_i$。
提示:只要完美重排操作中选择的 $L$ 不同或 $R$ 不同,就被认为是两种不同的方案。
输入格式
第一行包含两个正整数 $n,Q$,分别表示数组 $a$ 的长度和询问的次数。
第二行包含 $n$ 个正整数,其中第 $i$ 个正整数表示数组 $a$ 中的元素 $a_i$($1\le a_i\le n$)。
接下来 $Q$ 行,其中第 $i$ 行包含两个正整数 $x_i,y_i$($1\le x_i< y_i \le n$),表示第 $i$ 组询问的两个参数。
输出格式
共输出 $Q$ 行。
对于第 $i$ 组询问而言:仅需在第 $i$ 行输出一个非负整数,表示完美重排的方案数。方案应进行恰好一次完美重排,使得数组 $a$ 中原先下标为 $x_i$ 的元素,在重排后的下标为 $y_i$。
说明/提示
**【样例 #1】**
::::info[样例 #1 解释]
此样例下,$a=[3,4,1,2]$。
* 对于第一组询问:只需取 $L=1,R=4$ 进行一次完美重排,就能使得 $a_1$ 在重排后的下标为 $3$(重排前:$a=[\red{3},4,1,2]$,重排后:$a'=[1,2,\red{3},4]$)。可以证明这是唯一的一种方案,故方案数为 $1$;
* 对于第二组询问:可以证明,无论如何选取 $L,R$,都不可能使得 $a_1$ 在重排后的下标为 $4$,故方案数为 $0$;
* 对于第三组询问:
1. 第一种方案是取 $L=1,R=4$ 进行一次完美重排(重排前:$a=[3,\red{4},1,2]$,重排后:$a'=[1,2,3,\red{4}]$);
2. 第二种方案是取 $L=2,R=4$ 进行一次完美重排(重排前:$a=[3,\red{4},1,2]$,重排后:$a'=[3,1,2,\red{4}]$),可以验证均满足条件。不存在其它满足条件的方案了,故方案数为 $2$。
::::
**【样例 #2】**
::::info[样例 #2 解释]
此样例下,$a=[6,3,5,7,2,4,1]$。
为了简便,我们用数对 $(i,j)$ 来表示选取 $L=i$,$R=j$ 进行一次完美重排的方案。各组询问对应的所有方案见下表:
| 询问编号 | 方案数 | 方案 1 | 方案 2 | 方案 3 | 方案 4 |
|:-:|:-:|:-:|:-:|:-:|:-:|
| **1** | $2$ | $(1,3)$ | $(1,4)$
| **2** | $1$ | $(1,5)$
| **3** | $0$ |
| **4** | $3$ | $(1,7)$ | $(2,5)$ | $(2,6)$
| **5** | $1$ | $(2,7)$
| **6** | $0$ |
| **7** | $3$ | $(1,7)$ | $(2,6)$ | $(3,6)$
| **8** | $4$ | $(1,6)$ | $(2,6)$ | $(3,6)$ | $(4,6)$
| **9** | $1$ | $(5,7)$ |
| **10** | $2$ | $(5,7)$ | $(6,7)$ |
::::
**【样例 #3】**
见附件中的 ```sort/sort3.in``` 与 ```sort/sort3.ans```。
这个样例满足测试点 $7 \sim 12$ 的限制。
**【样例 #4】**
见附件中的 ```sort/sort4.in``` 与 ```sort/sort4.ans```。
这个样例满足测试点 $13 \sim 14$ 的限制。
**【样例 #5】**
见附件中的 ```sort/sort5.in``` 与 ```sort/sort5.ans```。
这个样例满足测试点 $15 \sim 20$ 的限制。
---
**【数据范围】**
对于所有测试点,保证 $2\le n\le 10^4$,$1\le Q\le 2\times 10^3$,$1\le x_i< y_i\le n$,且数组 $a$ 是 $1\sim n$ 的排列。
::cute-table{tuack}
| **测试点编号** | $n \le$ | $Q \le$ | **特殊性质** |
|:-:|:-:|:-:|:-:|
| $1 \sim 6$ | $20$ | $20$ | 无 |
| $7 \sim 12$ | $500$ | $100$ | ^ |
| $13 \sim 14$ | $10^4$ | $2\times 10^3$ | **A** |
| $15 \sim 20$ | ^ | ^ | 无 |
特殊性质 **A**:保证 $a_i=n-i+1$。
* 分值分配:每个测试点的分值为 $5$ 分。
* 请注意本题特殊的内存限制。