记录编号 |
63814 |
评测结果 |
AAAAAAAAAA |
题目名称 |
画展 |
最终得分 |
100 |
用户昵称 |
digital-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;
}