uva11572Unique Snowflakes(滑动窗口)

来源:互联网 发布:淘宝新店扶植 编辑:程序博客网 时间:2024/06/03 19:14

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=27&page=show_problem&problem=2619

首先考虑l=0的情况,可以从r=0开始不断增加r,相当于将序列的右端点向右延伸,直到无法延伸(a[r+1]曾出现在序列中),l++直到a[r+1]数值被从序列中删除,然后接着延伸

代码:

#include<iostream>#include<cstdio>#include<cstring>#include<set>#include<cassert>#include<cmath>#include<algorithm>using namespace std;const int maxn=1000000+5;int A[maxn];int main(){    int T,n;    scanf("%d",&T);    while(T--)    {        scanf("%d",&n);        for(int i=0;i<n;i++)            scanf("%d",&A[i]);        set<int>s;        int l=0,r=0,ans=0;        while(r<n)        {            while(r<n&&!s.count(A[r]))s.insert(A[r++]);            ans=max(ans,r-l);            s.erase(A[l++]);        }        printf("%d\n",ans);    }    return 0;}


0 0
原创粉丝点击