#P2131. Key Insertion
Key Insertion
问题描述
作为 Macrohard 公司的一名员工,你被要求实现一种新的数据结构,用于存储一些整数键值。
这些键值需要存储在一个特殊的、有序的集合中,可以将其视为一个无限大的数组 A
,数组的位置从 1 开始编号。初始时,所有位置都是空的。该集合需要支持以下操作:Insert(L, K)
,其中 L
是数组中的位置,K
是某个正整数。
操作的执行规则如下:
- 如果
A[L]
是空的,直接将A[L]
设为K
。 - 如果
A[L]
不是空的,先执行Insert(L + 1, A[L])
,然后再将A[L]
设为K
。
给定 N
个整数 L1, L2, ..., LN
,你需要在一系列操作后输出数组的内容。这些操作依次为:
- Insert(L1, 1)
- Insert(L2, 2)
- ...
- Insert(LN, N)
输入格式
第一行包含两个整数 N
和 M
,分别表示插入操作的次数和插入操作中可能使用的最大位置(,)。
第二行包含 N
个整数 Li
,表示要执行的插入操作的位置()。
输出格式
输出执行完所有插入操作后数组的内容:
- 第一行输出
W
,表示最远的非空位置编号。 - 第二行输出
W
个整数,依次为A[1], A[2], ..., A[W]
。如果某个位置为空,则输出 0。
示例输入 1
5 4
3 3 4 1 3
示例输出 1
6
4 0 5 2 3 1
来源
Northeastern Europe 2003, Northern Subregion