#CF1077D. 切割数组
切割数组
D. 切割数组
每个测试的时间限制:3 秒
内存限制:256 兆字节
你有一个由 个整数组成的数组 。
你需要找到一个长度为 的数组 ,使得从 中能够切割出数组 的副本数量最大。
切割出 的一个副本的含义是:对于数组 中的每个元素 ,你需要在 中找到该元素并把它从 中移除。如果对于某个 你无法在 中找到该元素,那么你就无法再切割出下一个 的副本。
两个数组都可以包含重复元素。
例如,如果 且 ,那么一个可能的答案是 。
这个数组 可以切割出 次。
- 为了切割出第一个 副本,你可以使用元素 $[1, \underline{2}, 3, 2, 4, \underline{3}, \underline{1}]$(使用高亮元素)。
切割出第一个 副本后, 可能变成 。 - 为了切割出第二个 副本,你可以使用元素 。
切割出第二个 副本后, 将变成 。
你的任务是:找到一个数组 ,使得你从 中切割出 的副本的次数最多。
如果有多个答案,你可以输出其中任意一个。
输入
第一行包含两个整数 和 ()—— 数组 的元素个数,以及数组 需要的元素个数。
第二行包含恰好 个整数 ()。
输出
输出 个整数 —— 数组 的元素,使得从 中切割出 的副本数量最大。
如果有多个答案,输出任意一个。
数组 可以包含重复元素。 的所有元素 应满足 。
示例
输入
7 3
1 2 3 2 4 3 1
输出
1 2 3
输入
10 4
1 3 1 3 10 3 7 7 12 3
输出
7 3 1 3
输入
15 2
1 2 1 1 1 2 1 1 2 1 2 1 1 1 1
输出
1 1
提示
第一个示例已在题目描述中解释。
在第二个示例中,唯一的答案是 及其任意排列。可以证明,你无法选择任何其他数组使得最大切割次数等于 。
在第三个示例中,数组 可以被切割出 次。