#include<bits/stdc++.h>
using namespace std;
#define N 1000101
#define LL __int64
#define inf 1e30;
int vis[N],a[N];
int main()
{
int i,j,n,m,ans=0,l,r;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
queue<int>q;
int tmp=0;//不同元素的个数
for(i=1;i<=n;i++)
{
q.push(a[i]);
if(!vis[a[i]]) tmp++;
vis[a[i]]++;
if(tmp<=m){// 符合条件
if(q.size()>ans){//子序列比原来的更长
ans=q.size();
r=i;l=i-ans+1;
}
}
else{//从队列的头开始删除直到tmp减小
while(1){
int t=q.front();q.pop();
vis[t]--;
if(vis[t]==0){
tmp--;
break;
}
}
}
}
printf("%d %d\n",l,r);
return 0;
}
Longest k-Good Segment
最新推荐文章于 2019-07-04 12:45:41 发布