【CodeForces】616D

来源:互联网 发布:php集成环境搭建 编辑:程序博客网 时间:2024/06/06 02:20

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;}
原创粉丝点击