• 2019年杭电多校训练第一场1012


     
    题意:给出n,c,k。
    接着给出n个数字(在1~c之间),问最长的区间长度。该区间满足任意一个出现的数字至少出现k次。

    思路:
    我们可以把可能满足条件的区间进行判断,然后按区间内不符合条件的数的下标进行再次分区间,再次进行判断。
    一直到所有的可能满足条件的区间都被判断完。
    坑点:在分区间时,对于边界的处理比较繁琐,(l,r)与不满足条件的数的下标的关系要·特别注意。
     
    #include<bits/stdc++.h>
    using namespace std;
    #define met(a,b) memset(a,b,sizeof(a))
    int a[100009];
    int ans=0;
    map<int, vector<int> >pos;
    int n,c,k;
    void dfs(int l,int r)
    {
        //cout<<l<<"............."<<r<<endl;
        if(r-l+1<k) return;
        if(l==r)
        {
            if(k<=1)ans=max(ans,1);
            return ;
        }
        else if(r<l) return ;
        int i=0;
        for( i=l; i<=r; i++){
                int tl=lower_bound(pos[a[i]].begin(),pos[a[i]].end(),l)-pos[a[i]].begin();
                int tr=upper_bound(pos[a[i]].begin(),pos[a[i]].end(),r)-pos[a[i]].begin();
    
                if(tr-tl<k) break;
        }
        if(i==r+1) ans=max(ans,r-l+1);
        else
        {
            int st=l,j;
            for(j=0;j<pos[a[i]].size();j++)if(st<=pos[a[i]][j])break;
              for(;j<pos[a[i]].size()&&pos[a[i]][j]<r;j++)
              {
                  dfs(st,pos[a[i]][j]-1);
                  st=pos[a[i]][j]+1;
              }
              if(j<pos[a[i]].size())
                       dfs(st,r);
              else
              {
                  dfs(pos[a[i]][j-1]+1,r);
              }
    
        }
        return ;
    }
    int main()
    {
    
        while(cin>>n>>c>>k)
        {
             for(int i=1;i<=c;i++)pos[i].clear();
            met(a,0);
            ans=0;
            for(int i=1; i<=n; i++)
            {
                scanf("%d",&a[i]);
                pos[a[i]].push_back(i);
            }
            // cout<<"1"<<"        "<<n<<endl;
            dfs(1,n);
    
            cout<<ans<<endl;
        }
        return 0;
    }



     
  • 相关阅读:
    exgcd模板
    jnYaVpqwsq
    Http状态码完整说明
    字符串的常用方法
    MVC4.0 Controller和View重复加载
    ASP.NET MVC4中的Model验证 移除指定验证信息
    枚举类型定义字符串
    MVC4.0系统开发新手历程(四)数据列表查询
    MVC4.0系统开发新手历程(三)---数据导入计算
    MVC4.0系统开发新手历程(二)
  • 原文地址:https://www.cnblogs.com/yzxqq/p/11247359.html
Copyright © 2020-2023  润新知