D. 切割子序列(cut)

    传统题 文件IO:cut 1000ms 256MiB

切割子序列(cut)

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

读写要求

本题采用文件读写,请在提交代码时使用正确的文件读写方式,否则会导致 RE

输入:cut.in

输出:cut.out

题目描述

给你一个序列 ss,长度为 nn.

你需要找到一个长度为 kk 的序列 tt 使得它能被最多次数地从 ss 中切割。

一次切割的意思是你需要对于 tt 序列中所有 tit_i,在 ss 中找到一个跟它相同的数,并将其移除。

举例,如果 s=[1,2,3,2,4,3,1]s=[1,2,3,2,4,3,1]k=3k=3,那么一种可行的方案是 t=[1,2,3]t=[1,2,3],这个子序列可以被切割两次。

  • 第一次切割,你可以选择 $[1, \underline{\textbf{2}}, 3, 2, 4, \underline{\textbf{3}}, \underline{\textbf{1}}]$,移除完后 s=[1,3,2,4]s=[1,3,2,4]
  • 第二次切割,你可以选择 $s=[\underline{\textbf{1}},\underline{\textbf{3}},\underline{\textbf{2}},4]$,移除完后 s=[4]s=[4]

你的任务是找到一个序列 tt,能最多次数地从 ss 中切割它。如果有多个可行的方案,只需输出任意一种。

输入格式

第一行两个整数 n,k(1kn2×105)n,k(1\le k\le n\le 2\times 10^5),表示 ss 序列的长度和 tt 序列的长度。

接下来一行 nn 个整数 s1,s2,...,sn(1si2×105)s_1,s_2,...,s_n(1\le s_i\le 2\times 10^5)

输出格式

输出 kk 个整数,表示你找到的序列 tt 使得能被切割的次数最大。如果有多个方案,只需输出任意一种。

样例解释

第一个样例在样例描述中已经说过。

第二个样例中可行的方案只有 [7,3,1,3][7,3,1,3] 和它的全排列。可以证明你不能找到其它长度为 kk 的序列 tt 使得能被切割两次

第三个样例中 t=[1,1]t=[1,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 

周赛#1027(div3)复现赛

未参加
状态
已结束
规则
IOI
题目
5
开始于
2026-5-23 21:00
结束于
2026-5-30 13:00
持续时间
1 小时
主持人
参赛人数
3