http://codeforces.com/problemset/problem/616/D
n个数,找出一个连续区间,使该区间不同的数的个数小于等于k且尽可能长。
使用Tow points解决
#include <bits/stdc++.h>
using namespace std;
int n,k;
int a[500005];
int f[1000005];
int cnt;
int ansL,ansR,len;
int main(){
cin >> n >> k;
for (int i=1;i<=n;i++){
cin >> a[i];
}
int l=1;
for (int r=1;r<=n;r++){
if (f[a[r]]==0) cnt++;
f[a[r]]++;
if (cnt>k){
for (int j=l;j<=r;j++){
f[a[j]]--;
if (f[a[j]]==0){
cnt--;
l=j+1;
break;
}
}
}
if (r-l+1>len){
len=r-l+1;
ansL=l;
ansR=r;
}
}
cout << ansL << " " << ansR << endl;
}