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