• Codeforces Educational Codeforces Round 5 D. Longest k-Good Segment 尺取法


    D. Longest k-Good Segment

    题目连接:

    http://www.codeforces.com/contest/616/problem/D

    Description

    The array a with n integers is given. Let's call the sequence of one or more consecutive elements in a segment. Also let's call the segment k-good if it contains no more than k different values.

    Find any longest k-good segment.

    As the input/output can reach huge size it is recommended to use fast input/output methods: for example, prefer to use scanf/printf instead of cin/cout in C++, prefer to use BufferedReader/PrintWriter instead of Scanner/System.out in Java.

    input

    The first line contains two integers n, k (1 ≤ k ≤ n ≤ 5·105) — the number of elements in a and the parameter k.

    The second line contains n integers ai (0 ≤ ai ≤ 106) — the elements of the array a.

    Output

    Print two integers l, r (1 ≤ l ≤ r ≤ n) — the index of the left and the index of the right ends of some k-good longest segment. If there are several longest segments you can print any of them. The elements in a are numbered from 1 to n from left to right.

    Sample Input

    5 5

    1 2 3 4 5

    Sample Output

    1 5

    Hint

    题意

    给你n个数,你需要找到一个最长的区间,使得这个区间里面不同的数小于等于k个

    题解:

    尺取法扫一遍就好了

    代码

    #include<bits/stdc++.h>
    using namespace std;
    
    #define maxn 1000005
    int a[maxn];
    int vis[maxn];
    int main()
    {
        int n,k;scanf("%d%d",&n,&k);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        int al=0,ar=0,ans=0,now=0,l=1;
        for(int i=1;i<=n;i++)
        {
            vis[a[i]]++;
            if(vis[a[i]]==1)now++;
            while(now>k)
            {
                vis[a[l]]--;
                if(vis[a[l]]==0)
                    now--;
                l++;
            }
            if(i-l+1>=ar-al+1)
                ar=i,al=l;
        }
        cout<<al<<" "<<ar<<endl;
    }
  • 相关阅读:
    clearfix
    css浮动
    css常识
    给数组排序方法2
    定时器
    数组
    redhat 7.6 iptables 配置
    redhat 7.6 流量监控命令、软件(3)nethogs 监控进程实时流量
    redhat 7.6 流量监控命令、软件(2) iftop 监控网络IP实时流量
    redhat 7.6 流量监控命令、软件(1) ethstatus
  • 原文地址:https://www.cnblogs.com/qscqesze/p/5127216.html
Copyright © 2020-2023  润新知