#P16504. [NEERC2003 Northern]Key Insertion

[NEERC2003 Northern]Key Insertion

题目描述

你是 Macrohard 公司的一名员工,需要实现一种用于存储整数键的新数据结构。

这些键保存在一个特殊的有序集合中。该集合可以看作一个数组 AA

  • 数组拥有无限多个位置;
  • 位置从 11 开始编号;
  • 初始时所有位置均为空。

数据结构需要支持操作 Insert(L,K),其中 LL 是数组位置,KK 是一个正整数键值。

操作按如下方式递归执行:

  • 如果 A[L]A[L] 为空,则令

    A[L]K.A[L]\leftarrow K.
  • 如果 A[L]A[L] 非空,则先执行

    Insert(L+1,A[L]),\operatorname{Insert}(L+1,A[L]),

    再令

    A[L]K.A[L]\leftarrow K.

给定 NN 个整数 L1,L2,,LNL_1,L_2,\ldots,L_N,你需要依次执行:

Insert(L1,1),\operatorname{Insert}(L_1,1), Insert(L2,2),\operatorname{Insert}(L_2,2), \cdots Insert(LN,N),\operatorname{Insert}(L_N,N),

并输出所有操作完成后的数组内容。

输入格式

第一行包含两个整数 N,MN,M

  • NN 表示 Insert 操作的数量;
  • MM 表示所有插入操作中允许使用的最大初始位置。

满足:

1N131072,1\le N\le 131072, 1M131072.1\le M\le 131072.

第二行包含 NN 个整数 L1,L2,,LNL_1,L_2,\ldots,L_N,描述依次执行的插入操作,且

1LiM.1\le L_i\le M.

输出格式

第一行输出整数 WW,表示最终数组中最靠右的非空位置编号。

第二行输出 WW 个整数:

A[1],A[2],,A[W].A[1],A[2],\ldots,A[W].

若某个位置为空,则在对应位置输出 0

样例输入

5 4
3 3 4 1 3

样例输出

6
4 0 5 2 3 1

数据范围与限制

  • 1N,M1310721\le N,M\le 131072
  • 1LiM1\le L_i\le M
  • 时间限制:2 s2\text{ s}
  • 空间限制:64 MB64\text{ MB}