文理学院程序设计在线练习


Clear

Time Limit: 1 Second(s)    Memory Limit: 32 MB

Total Submission(s): 36   Accepted Submission(s): 4
Problem Description

现在你遇到了一个简易的消除游戏,规则很简单,数字按顺序逐个给出,每次你可以按顺序将相同的数字堆叠起来,或者选择不堆叠转而弃掉数字;同时,如果堆叠的相同数字达到k个,那么这个位置就会发生一次clear(清空后可以用来堆叠其他数字),此时你将得到一点积分。当然你不可能贪心的堆叠所有的数字,你仅最多可以同时堆叠m个数字,如果你想要堆叠第m+1个数字,那么就必须将之前堆叠的m个数中删除掉一个。
然而这个simple的游戏出了点bug,你莫名其妙的拿到了接下来将要出现的n个数字,现在想要你得出对于当前的数字顺序,你可以拿到的最高积分为多少(积分一开始为0)。

Input

第一行一个正整数T(T<=50),代表数据组数。
对于每组数据第一行三个正整数n、m、k,代表数字序列的长度,同时最多可堆叠的数字量以及消除阈值。
接下来一行n个数字,代表接下来按顺序出现的数字xi
(n,m,k<=5*105, ∑n<=6*105, xi <= 5*105)

Output

对于每组数据输出一个整数x,代表你可以得到的最大积分。

Sample Input
2
3 2 3
1 2 3
12 2 3
1 2 3 4 4 4 2 3 3 2 1 1
Sample Output
0
2
Source

2019校赛