跳到主要内容

P4799. 晶石净化

场次:2026年4月18日-开发岗 · 来源:CodeFun2000 P4799

题目描述​

在一间能量实验室中,从左到右依次摆放着 nn 个晶石,每个晶石拥有一个正整数的能量值。研究员将进行 mm 轮净化操作,每轮操作规则如下:在当前尚未被净化的晶石中,选择能量值最小的一个将其净化移除;如果同时存在多个能量值同为最小的晶石,则移除其中最靠左(即出现最早)的那一个。请你计算出所有净化操作完成后,剩余晶石的能量值序列(保留原始顺序)。

约束:

  • 测试数据组数 TT 不超过 2*10^5。
  • 每组数据中,晶石数量 nn 不超过 2*10^5,净化轮数 mm 满足 0≤m<n0 \le m < n。
  • 每个晶石的能量值均为 11 到 nn 之间的整数。
  • 所有测试数据中 nn 的总和不超过 4*10^5。

输入格式​

第一行包含一个整数 TT,表示测试数据的组数。接下来每组数据包含两行:第一行有两个整数 nn 和 mm,分别表示晶石数量和净化轮数;第二行有 nn 个整数,依次给出从左到右每个晶石的能量值。

输出格式​

对于每组测试数据,在一行内输出剩余晶石的能量值,整数之间用空格分隔。

示例​

示例 1​

输入:

1
5 3
2 3 2 1 2

输出:

3 2

说明:

初始晶石能量值为 [2,3,2,1,2][2, 3, 2, 1, 2],共 n=‘5‘n=`5` 个晶石,需要进行 m=‘3‘m=`3` 轮净化。

第 1 轮:当前序列中最小能量值为 1,仅有位置 4 的晶石为 1,将其净化移除,剩余序列为 [2,3,2,2][2, 3, 2, 2]。

第 2 轮:最小能量值为 2,存在多个(原位置 1、3、5),移除最靠左的 2(原位置 1),剩余序列为 [3,2,2][3, 2, 2]。

第 3 轮:最小能量值仍为 2,移除剩余中最靠左的 2(原位置 3),最终剩余晶石为 [3,2][3, 2],按原顺序输出 3 2。

示例 2​

输入:

1
3 0
5 3 7

输出:

5 3 7

说明:

净化轮数 m=‘0‘m=`0`,表示不进行任何净化操作。剩余晶石即为初始序列 [5,3,7][5, 3, 7],按原顺序输出 5 3 7。

示例 3​

输入:

1
4 3
4 4 4 4

输出:

4

说明:

初始晶石能量值全为 4,共 n=‘4‘n=`4` 个,净化 m=‘3‘m=`3` 轮。每轮当前序列的最小值均为 4,根据规则移除最靠左的一个。

第 1 轮:移除位置 1 的 4,剩余 33 个 4。 第 2 轮:移除剩余中最靠左的 4(原位置 2),剩余 22 个 4。 第 3 轮:再移除剩余中最靠左的 4(原位置 3),最终只剩位置 4 的晶石,输出 4。

加载评论中...