题目描述
dd_engi同学最爱的食物就是面包啦!dd_engi要去参加RQNOJ一周年邀请赛,为了在参加比赛的时候能吃面包,这一天他又来到了面包店长长的货架前。面包店的货架上按次序放了N个面包,每个面包用一个数字表示它的种类。所有种类的面包dd都很喜欢,而且,贪心的他,希望每种面包都能至少吃到K个。为了吃起来方便,dd打算从面包的序列中选择连续的一段来吃掉。现在的问题是,在满足要求的前提下,如果希望吃掉的面包最少,dd_engi应该怎样选择呢?
样例说明
一共有13个面包,从第二行的序列可以看出有三个不同的种类“1”、“2”和“3”。要求是这三种面包每种都要吃掉至少两个。最优的方案是吃掉从第1个到第7个这七个面包,也就是选择“1 2 3 3 3 1 2”这一段序列。从第5个面包开始的序列“3 1 2 3 2 2 1”也满足要求,但应该输出最靠前的那个,也就是“1 7”。
数据规模
对于20%的数据,N<=20。
对于40%的数据,N<=1024。
对于100%的数据,1<=N<=1000000,1<=K<=N,其它整数在[0,1e9]的范围内。
[出题:dd_engi]
[题目版权:未经RQNOJ许可,不允许以任何方式转载本题]
[对于FP的选手,5-10测试点时限为3.5s,C++可以在1s内出解]
输入格式
第一行,空格隔开的两个整数N和K。
第二行有N个整数,表示货架上按次序的N个面包所属的种类,相同的整数表示相同的种类。
输出格式
需要输出两个整数,表示dd选择吃掉的面包序列的起始和终止位置。如果有多个答案满足要求,输出起始位置最靠前的。对于无解的数据,输出-1。
样例输入
样例输出