A - Longest k-Good Segment-尺取

  • A - Longest k-Good Segment

  •  CodeForces - 616D 
  • 题意:寻找一个保持有k个不同的数字但是长度最长的序列
  • #include <bits/stdc++.h>
    using namespace std;
    #define maxn 1000006
    int vis[maxn],b[maxn];
    int n,k,ansl,ansr;
    int main()
    {
        cin>>n>>k;
        int j=0,num=0,maxx=0;
        for(int i=1; i<=n; i++)
        {
            cin>>b[i];
            if(!vis[b[i]])
            {
                vis[b[i]]++;
                num++;
                if(num>k)
                {
                    for(j=j+1; j<i; j++)
                    {
                        vis[b[j]]--;
                        if(vis[b[j]] == 0)
                        {
                            break;
                        }
                    }
                    num--;
                }
            }
            else
                vis[b[i]]++;
            if(i-j>maxx)
            {
                maxx =i-j;
                ansl=j;
                ansr=i;
            }
        }
        cout<<ansl+1<<" "<<ansr<<endl;
        return 0;
    }

猜你喜欢

转载自blog.csdn.net/BePosit/article/details/82154035