#9846. 数组操作与排序
数组操作与排序
问题 [编号]:数组操作与排序 (难度:中等) 竞技编程-提高思维
题目描述 今有N个数组,初始时,N个数组均为空。共有M次操作,每次在第X个数组中加入数字Y。问最终各数组中有多少数,并将它们排序输出。 比如,输入如下数据:
3 5
1 3
1 2
1 1
2 1
3 1
表示有3个数组,共有5次操作,分别向第1个数组存入3,第1个数组存入2,第1个数组存入1,第2个数组存入1,第3个数组存入1。 输出如下:
3 1 2 3
1 1
1 1
第1行表示:第1个数组中有3个数,排序结果为1 2 3 第2行表示:第2个数组中有1个数,排序结果为1 第3行表示:第3个数组中有1个数,排序结果为1
输入格式 第一行两个整数N、M(N≤100000,M≤300000)。 接下来M行,每行两个整数X、Y,含义见试题描述。(1≤X≤N,Y≤10^9)
输出格式 共N行,第i行第一个数SUM,表示第i个数组数的个数,接下来SUM个数,为排序之后的数组。
示例
输入示例 1:
3 5
1 3
1 2
1 1
2 1
3 1
输出示例 1:
3 1 2 3
1 1
1 1
具体来说:
- 第一行
3 1 2 3
表示第1个数组有3个元素,且排序后是1 2 3
。 - 第二行
1 1
表示第2个数组有1个元素,且这个元素是1
。 - 第三行
1 1
表示第3个数组有1个元素,且这个元素是1
。
所以,输出的这两行是针对第二个和第三个数组的,它们的元素都只有一个,即 1
。
时间复杂度分析
- 操作次数为M,最多为300,000。
- 每个数组最多有M个元素,因此可以使用合适的数据结构来保证操作效率,例如使用
vector
或list
存储数组,最后对每个数组进行排序。 - 时间复杂度主要由排序操作占主导,每个数组的排序复杂度为O(k log k),其中k是该数组的长度。
- 总时间复杂度为O(N * log N + M),其中N为数组数目,M为操作数。