#P2131. Key Insertion

    ID: 1132 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>数据结构归并树模拟Northeastern Europe 2003Northern Subregion

Key Insertion

问题描述

作为 Macrohard 公司的一名员工,你被要求实现一种新的数据结构,用于存储一些整数键值。

这些键值需要存储在一个特殊的、有序的集合中,可以将其视为一个无限大的数组 A,数组的位置从 1 开始编号。初始时,所有位置都是空的。该集合需要支持以下操作:Insert(L, K),其中 L 是数组中的位置,K 是某个正整数。

操作的执行规则如下:

  1. 如果 A[L] 是空的,直接将 A[L] 设为 K
  2. 如果 A[L] 不是空的,先执行 Insert(L + 1, A[L]),然后再将 A[L] 设为 K

给定 N 个整数 L1, L2, ..., LN,你需要在一系列操作后输出数组的内容。这些操作依次为:

  • Insert(L1, 1)
  • Insert(L2, 2)
  • ...
  • Insert(LN, N)

输入格式

第一行包含两个整数 NM,分别表示插入操作的次数和插入操作中可能使用的最大位置(1N1310721 \leq N \leq 1310721M1310721 \leq M \leq 131072)。

第二行包含 N 个整数 Li,表示要执行的插入操作的位置(1LiM1 \leq Li \leq M)。

输出格式

输出执行完所有插入操作后数组的内容:

  • 第一行输出 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