zoukankan      html  css  js  c++  java
  • CodeForces 190D Non-Secret Cypher

    双指针。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    
    const int maxn=400000+10;
    int n,k,a[maxn],b[maxn];
    int cnt[maxn];
    
    int get(int val)
    {
        int l=1,r=n;
        int pos=-1;
        while(l<=r)
        {
            int mid=(l+r)/2;
            if(b[mid]>val) r=mid-1;
            else if(b[mid]<val) l=mid+1;
            else pos=mid, r=mid-1;
        }
        return pos;
    }
    
    int main()
    {
        scanf("%d%d",&n,&k);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            b[i]=a[i];
        }
        sort(b+1,b+1+n);
        for(int i=1;i<=n;i++) a[i]=get(a[i]);
    
        memset(cnt,0,sizeof cnt);
    
        int l=1,r=1; cnt[a[1]]++;
        long long ans=0;
        while(1)
        {
            if(cnt[a[r]]==k)
            {
                ans=ans+(long long)(n-r+1);
                cnt[a[l]]--;
                l++;
            }
    
            else
            {
                r++;
                cnt[a[r]]++;
            }
            if(l>n||r>n) break;
    
        }
        printf("%lld
    ",ans);
    
        return 0;
    }
  • 相关阅读:
    第一篇随笔
    我的第一篇博客
    第一次博客
    芜湖
    芜湖~
    起飞
    第一天
    第一篇随笔
    第一篇随笔
    随笔
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5671758.html
Copyright © 2011-2022 走看看