CFCF2146F.Bubble Sort
省选/NOI-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
你刚刚学习了冒泡排序算法,它可以将一个数组按非降序排序。我们定义函数 sort(a) 如下伪代码:
function sort(array a):
rounds := 0
n := length of a
while a is not non-decreasing:
rounds := rounds + 1
for i from 1 to n - 1:
if a[i] > a[i + 1]:
swap(a[i], a[i + 1])
return rounds
如上所示,sort(a) 的返回值表示通过冒泡排序将数组 a 排序为非降序所需的轮数。
现给定一个整数 n,以及 m 个三元组 (ki,li,ri)(1≤i≤m)。请统计满足以下限制条件的长度为 n 的排列 p 的个数,答案对 998244353 取模:
- 对于每个 1≤i≤n,令 bi=sort([p1,p2,…,pi]);
- 对于每个 1≤j≤m,令 x 表示有多少个索引 y(1≤y≤n)满足 by≤kj,则一定有 lj≤x≤rj。
注:排列是长度为 n 的数组,包含 1 到 n 的所有整数且互不重复。例如,[2,3,1,5,4] 是一个排列,而 [1,2,2] 不是(2 出现了两次),[1,3,4] 也不是(n=3,但包含 4)。
输入格式
每个测试点包含多组测试数据。第一行包含一个整数 t(1≤t≤104),表示测试数据组数。
每组测试数据的第一行包含两个整数 n 和 m(2≤n≤106,0≤m≤1000)。
随后 m 行,每行三个整数 ki,li,ri(0≤ki≤n−1,1≤li≤ri≤n),表示限制条件。
保证所有测试数据中 m2 的总和不超过 106。
输出格式
对于每组测试数据,输出一个整数,表示满足条件的排列数,对 998244353 取模。
输入输出样例
输入#1
6 4 3 0 1 1 1 3 3 2 4 4 3 2 0 3 3 1 2 3 4 3 1 2 2 2 3 4 0 1 2 5 3 1 1 4 3 5 5 4 5 5 10 5 1 2 3 2 3 4 3 4 5 4 5 6 5 6 7 1000000 0
输出#1
2 1 8 80 192600 373341033
说明/提示
在第一个测试点中,只有排列 [3,1,4,2] 和 [4,1,3,2] 满足条件。以下以 [3,1,4,2] 为例,计算其 b 数组:
- sort([3])=0;
- sort([3,1])=1;
- sort([3,1,4])=1;
- sort([3,1,4,2])=2。
因而 b=[0,1,1,2],满足所有限制。
第一个测试用例只有排列 [1,2,3] 满足条件。
第三个测试用例有 8 个排列满足条件:
- [2,3,1,4];
- [2,4,1,3];
- [3,2,1,4];
- [3,4,1,2];
- [3,4,2,1];
- [4,2,1,3];
- [4,3,1,2];
- [4,3,2,1]。