题目描述
题目描述
Petya 最近在学习数据结构。他正在练习最小堆,Petya 对他的堆进行若干操作,并且记录下了每次操作的结果,包括以下三种:
(1)insert x:将一个值为 的数加入堆中。
(2)removeMin:删除堆中的最小数。
(3)getMin x:查询堆中的数的最小值,发现堆中数的最小值等于 。
做好记录后,Vova 来到 Petya 的房间,把 Petya 的记录弄丢了一部分。于是 Vova 决定在剩下的记录中添加一些记录,让记录不出现矛盾。
(1)insert x,直接将一个值为 的数加入堆中即可,不会出现矛盾。
(2)遇到 removeMin 时,如果堆中还有数,那么直接删除最小数即可。如果堆中没有数,就会出现矛盾,此时 Vova 会在 removeMin 前添加一条 insert 0,先将数 0 加入堆中,再进行删除操作。
(3)遇到 getMin x 时,分 3 种情况:
(i)堆中最小数等于 ,此时不会出现矛盾。
(ii)堆中没有数,或者堆中最小数大于 ,此时 Vova 会先添加一条 insert x 操作,这样堆中的最小数就是 了。
(iii)堆中最小数小于 ,此时 Vova 会添加若干条 removeMin 操作,直到堆中的最小数大于等于 或者堆中没有数为止。这样就化为(i)或(ii)的情况了。
输入 Petya 剩下的记录,输出 Vova 添加记录后,记录的条数以及完整记录。
输入描述
第 1 行,1 个正整数 ,表示剩下的记录个数。
接下来 行,每行是一条记录。如果是 insert 或 getMin 记录,后面会跟着一个整数 。
输出描述
第 1 行,输出一个正整数 ,表示 Vova 添加记录后,记录的条数。
接下来 行,每行一条记录,表示 Vova 添加后的完整记录,格式同输入。
样例 1
3
removeMin
getMin 4
getMin 5
7
insert 0
removeMin
insert 4
getMin 4
removeMin
insert 5
getMin 5
样例 2(原图存在笔误,见后面的校勘说明)
以下保留原图输入、输出,便于核对原题。
4
insert 1
insert 1
insert 1
getMin 2
7
insert 1
insert 1
insert 4
removeMin
removeMin
insert 2
getMin 2
说明提示(原文)
样例 1 说明:
第 1 条记录是 removeMin,但是此时堆中没有数,所以先添加一条 insert 0。
第 2 条记录是 getMin 4,但是此时堆中没有数,所以先添加一条 insert 4。
第 3 条记录是 getMin 5,但是此时堆中数的最小值是 4,所以要先进行 removeMin 直到堆中没有数,再添加一条 insert 5。
样例 2 说明:
前 3 条都不会出现矛盾。
第 4 条记录是 getMin 2,此时堆中数是 [1,1,4],添加 2 条 removeMin 之后,堆中最小数变成 4,再添加一条 insert 2,最小数就是 2 了。
数据范围
。
。
原题样例校勘说明
原图样例 2 的输入第三条是 insert 1,但输出第三条及说明使用的是 insert 4,两处不一致。上面保留原文,不将该笔误当作判题规则。
若按原图输入的三条 insert 1 执行,依题目规定应先删除三个 1,再插入 2,正确结果为以下 8 条记录:
8
insert 1
insert 1
insert 1
removeMin
removeMin
removeMin
insert 2
getMin 2
如果将输入第三条改为 insert 4,原图给出的 7 条输出和说明才相符。,现有测试数据不采用这组错误配对。