【题意】每个人偶有一个编队a[i]。爱丽丝每次可以报出一个数x,然后编队为x的所有人偶都会自动出列,剩余的人偶会组成一个新的序列。
爱丽丝最多只能报k次数,她想在报数结束后的序列中,寻找到一个尽可能长的区间满足区间中所有人偶的编队都是一样的。
【思路】尺取。每次i往后找颜色种类只增不减,从j开始找完后直到颜色数为n+1,ans取max。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define maxn 100005
using namespace std;
int n,a[maxn],col[maxn],num=0,k,ans=0;
int get(){
char c;while(!isdigit(c=getchar()));
int v=c-48;while(isdigit(c=getchar()))v=v*10+c-48;
return v;
}
void init(){
n=get();k=get();
memset(col,0,sizeof(col));
for(int i=1;i<=n;++i)a[i]=get();
}
int main(){
init();int j=1;
for(int i=1;i<=n;++i){
if(col[a[i]]==0)++num;
++col[a[i]];
while(num>k+1){
if(--col[a[j]]==0)--num;
++j;
}
ans=max(ans,col[a[i]]);
}
printf("%d\n",ans);
return 0;
}