zoukankan      html  css  js  c++  java
  • uva11572 Unique Snowflakes

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=101050#problem/B

    #include<bits/stdc++.h>
    #define REP(i,a,b) for(int i=a;i<=b;i++)
    #define MS0(a) memset(a,0,sizeof(a))
    
    using namespace std;
    
    typedef long long ll;
    const int maxn=1000100;
    const int INF=1<<29;
    
    int n;
    ll a[maxn];
    int L[maxn];
    
    int main()
    {
        freopen("in.txt","r",stdin);
        int T;cin>>T;
        while(T--){
            scanf("%d",&n);
            REP(i,1,n) scanf("%lld",&a[i]);
            map<ll,int> id;
            REP(i,1,n){
                if(id[a[i]]){
                    L[i]=id[a[i]];
                    id[a[i]]=i;
                }
                else id[a[i]]=L[i]=i;
            }
            int pre=1,ans=1;
            REP(i,1,n){
                while(L[i]<i&&L[i]>=pre) pre++;
                ans=max(ans,i-pre+1);
            }
            cout<<ans<<endl;
        }
        return 0;
    }
    
    /**
    题意:
        求一个数列中不含相同元素的最长连续子数列长度。
    分析:
        先预处理出每个元素左边第一个和自己相同的元素的下标,这一点用个map记下元素的id辅助一下就搞定了,
        接着直接滑窗即可,滑窗条件为右端点左边第一个相同元素的下标L[i]不能在当前区间[pre,i]中,这样就
        不含相同元素了。
    类型:
        贪心。
    注意事项:
        无。
    坑点:
        无。
    总结:
        记下L[i]和R[i]的方法的第n次使用。
    */
    View Code
    没有AC不了的题,只有不努力的ACMER!
  • 相关阅读:
    最少必要知识
    pythonGUI编程
    计算机网络基础
    .htaccess总结
    SSRF总结
    jsp学习笔记
    url任意跳转漏洞
    学期总结
    计科一班本学期作业成绩汇总表格
    C语言I博客作业08
  • 原文地址:https://www.cnblogs.com/--560/p/5008865.html
Copyright © 2011-2022 走看看