问题 4666 --裁剪

4666: 裁剪★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 161  解决: 60
[提交][状态][命题人:]

题目描述

给定一个数组s,其包含n个整数。

你需要找到一个长度为k的副本数组t,使得你能够从原数组s中裁剪出最大数量的副本数组t。

裁剪出一个副本数组t的定义如下:对于副本数组里的每个元素ti,你都必须从原数组s中找到与其相同的元素,并把它从s中删去。如果一些元素ti不能在原数组s中被找到,那么你就不可以在原数组s中裁剪出这样的副本数组t。数组s与数组t均可以包含相同的元素。

举一个例子如果s = {1,2,3,2,4,3,1},并且k = 3。一种可能的答案是t = {1,2,3}。以数组t为副本可以在原数组中裁剪两次。理由如下:

为了裁剪出第一组副本数组t,你可以裁剪{1,2,3,2,4,3,1}(加粗的数字),在第一次裁剪完后,原数组s将变成{1,3,2,4}。

为了裁剪出第二组副本数组t,你可以裁剪{1,3,2,4}(加粗的数组),在第二次裁剪完后,原数组s将变成{4}。

你的任务是去寻找一个副本数组t,使得你能够从原数组s中裁剪出最大数量的副本数组t。

输入

第一行的输入包含两个整数n和k(1<=k<=n<=2*10^5),它们分别代表原数组s的元素个数以及副本数组t的元素个数。

第二行输入包含n个整数:s1,s2,s3,....,sn。(1<=si<=2*10^5)

输出

打印出副本数组t中的k个整数,使得你能够从原数组s中裁剪出尽可能多数量的副本数组t。所求数组t可以包含相同元素。所有元素ti需要满足如下条件:1<=ti<=2*10^5

为保证答案唯一性,优先考虑较小元素,并且输出按升序排列。

样例输入
Copy
7 3
1 2 3 2 4 3 1
样例输出
Copy
1 2 3 

提示

样例2输入

10 4
1 3 1 3 10 3 7 7 12 3

样例2输出

1 3 3 7

样例3输入

15 2
1 2 1 1 1 2 1 1 2 1 2 1 1 1 1

样例3输出

1 1 

注释:

        在第二个例子中,唯一的答案是[7,3,1,3]和它的任何排列。可以看出,您不能选择任何其他数组。因此,您可以剪切的最大副本数将等于2。

在第三个例子中,数组t可以被裁剪5次。

来源

[提交][状态]