#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个元素,因此可以使用合适的数据结构来保证操作效率,例如使用vectorlist存储数组,最后对每个数组进行排序。
  • 时间复杂度主要由排序操作占主导,每个数组的排序复杂度为O(k log k),其中k是该数组的长度。
  • 总时间复杂度为O(N * log N + M),其中N为数组数目,M为操作数。