A. 连锁插入

    传统题 1000ms 256MiB

连锁插入

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

连锁插入

题目描述

给定一个由 nn 列组成的消息板,每一列最多可以容纳 hh 条消息。 每一列中的消息按照从上到下的顺序排列。

初始时,消息板为空。任意时刻,每一列中的消息都会连续占据该列最上方的若干位置,不会出现空位夹在消息之间的情况。

接下来有 qq 条消息依次到来。第 ii 条到来的消息编号为 ii,并且它会先被插入到第 pip_i 列。

一次插入按如下规则进行:

  • 新消息被放入该列的最上方;
  • 该列原有的所有消息整体向下移动一格;
  • 如果该列的消息数量因此超过 hh,那么最下方的那条消息会被挤出,并立即作为“新消息”插入到下一列的最上方;
  • 如果某条消息从第 nn 列被挤出,则这条消息直接消失。

对于每一条到来的消息,必须先完整处理它引发的所有连锁插入,再开始处理下一条消息。

请输出所有操作结束后消息板的最终状态。空位置用 0 表示。

输入格式

第一行包含三个整数 n,h,qn, h, q1n,h,q30001 \le n, h, q \le 3000)。

接下来输入 qq 个整数 p1,p2,,pqp_1, p_2, \dots, p_q1pin1 \le p_i \le n),其中 pip_i 表示第 ii 条消息初始插入的列号。

输出格式

输出 hh 行。

对于每一行 rr1rh1 \le r \le h),输出 nn 个整数。 第 cc 个整数表示最终状态下第 cc 列中从上到下第 rr 个位置的消息编号。 如果该位置为空,则输出 0

输入输出样例 #1

输入 #1

4 2 6
2 2 1 2 4 2

输出 #1

3 6 2 5
0 4 1 0

输入输出样例 #2

输入 #2

3 1 4
1 1 1 1

输出 #2

4 3 2

说明/提示

样例 2:

  • 消息 11 插入,第 11 列变为 1
  • 消息 22 插入,第 11 列变为 21 被挤到第 22 列;
  • 消息 33 插入,第 11 列变为 32 被挤到第 22 列,1 被挤到第 33 列;
  • 消息 44 插入第 11 列后,3 被挤到第 22 列;随后第 22 列溢出,2 被挤到第 33 列;随后第 33 列也溢出,1 被挤出消息板并直接消失。

最终各列从上到下分别为 432

【睿爸信奥】入门组算法周赛(20260412)

未参加
状态
已结束
规则
IOI
题目
4
开始于
2026-4-12 0:00
结束于
2026-4-17 20:00
持续时间
4 小时
主持人
参赛人数
16