您的位置:首页 > 编程语言 > Go语言

Longest k-Good Segment

2016-01-27 00:59 495 查看
点击打开链接

#include<bits/stdc++.h>
using namespace std;
#define N 1000101
#define LL __int64
#define inf 1e30;
int vis
,a
;
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: