记录编号 63814 评测结果 AAAAAAAAAA
题目名称 画展 最终得分 100
用户昵称 Gravatardigital-T 是否通过 通过
代码语言 C++ 运行时间 0.084 s
提交时间 2013-07-22 17:02:15 内存使用 4.14 MiB
显示代码纯文本
#include<fstream>
using namespace std;
ifstream fi("exhibit.in");
ofstream fo("exhibit.out");
int pic[1000001],sum[2001]={0},a,b,n,m,num,ans_a,ans_b;
int main(){
	int i,j;
	fi>>n>>m;
	for(i=1;i<=n;i++)fi>>pic[i];
	//读入
	
	a=1;
	b=1;
	sum[pic[1]]++;
	num=1;
	while(num<m)
	{
		b++;
		sum[pic[b]]++;
		if(sum[pic[b]]==1)//新添加的画
		{
			num++;
		}
	}
	//fo<<b<<endl;
	while(sum[pic[a]]>1)//把前边没必要看的画删去
	{
		sum[pic[a]]--;
		a++;
	}
	ans_a=a;
	ans_b=b;
	//预处理,找出a=1能看完整所有人的画的最小b值
	
	while(b<=n)
	{
		b++;
		sum[pic[b]]++;
		while(sum[pic[a]]>1)//把前边没必要看的画删去
		{
			sum[pic[a]]--;
			a++;
		}
		if(b-a+1<ans_b-ans_a+1)//是否产生了更佳答案,产生则替换
		{
			ans_a=a;
			ans_b=b;
		}
	}
	//挨个处理不同b值的最优情况,问题解决
	fo<<ans_a<<' '<<ans_b<<endl;
	//输出
	return 0;
}