#641. 非降序排列
非降序排列
题目描述
给定两个长度为 的整数数组 和 。
你可以任选一组下标的子集,并对该子集中的每个下标 同时交换 与 (也就是说,对于选中的每个 执行一次交换 )。如果在进行这些位置上的交换后,数组 与数组 都 非降序(即从左到右不减少),则该下标子集被称为 好子集。
你的任务是计算好子集的个数。由于结果可能很大,请对 取模输出答案。
输入格式
第一行包含一个整数 ()——测试用例数。
每个测试用例包含三行:
- 第一行包含一个整数 ()。
- 第二行包含 个整数 ()。
- 第三行包含 个整数 ()。
额外保证:对于每个测试用例,至少存在一个好子集。
输出格式
对于每个测试用例,输出一行,包含一个整数 —— 好子集的个数,对 取模。
样例输入
3
3
2 1 4
1 3 2
1
4
4
5
2 3 3 4 4
1 1 3 5 6
样例输出
2
2
8
说明
样例解释
- 第一个测试用例中,两个好子集为 与 。
- 第二个测试用例中,两个好子集为 与 (空集)。
- 第三个测试用例中的八个好子集列举见样例:$\{1,2,3,4,5\},\{1,2,3\},\{1,2,4,5\},\{1,2\},\{3,4,5\},\{3\},\{4,5\},\varnothing$。
数据范围
- 对每个测试用例至少存在一个好子集。