您的位置:首页 > 产品设计 > UI/UE

UVA 11572 Unique Snowflakes

2017-08-11 17:00 337 查看
题意:输入一个长度为n的序列A,找到一个尽量长的连续子序列Al~Ar,使得该序列中没有相同的元素

解题思路:从R=0开始不断增加R,相当于把所求的序列的右端点往右延伸,当无法延伸时(元素在该序列中出现过),只需增大L,并且继续延伸R,用set判断元素是否出现过,加假如出现过就删除Al,l++接着往下找,不断更新ans

代码:

#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <set>
using namespace std;

const int maxn=1000000+5;
int A[maxn];
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>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++]);
}
cout<<ans<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: