作者:xq的acm之路
题目大意:给出一个序列,求其中最长的没有重复的子序列的长度。。
思路:从第一个元素l开始,r一直加到有重复元素出现,然后l加一继续r加,,,借助集合判断有没有重复出现。
晚上做了半天的div,累了来找的这题uva水题,很简单的方法。。
代码如下:
#include <iostream>
#include <set>
#include <algorithm>
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]),r++;
ans=max(ans,r-l);
s.erase(a[l++]);
}
cout<<ans<<endl;
}
return 0;
}