Description
对于给出的一串数字,求出该串中最长的连续并且每个数仅出现一次的子序列。
Input
1
5
1
2
3
2
1
Output
3
由于数据范围很大 0~1e9,查找到一个数遍历一遍1e9不现实,这样就需要一种快速识别这个数是否出现过的方法。
就学习了一下set这个容器。
定义好set< > s; <>里面为容器的类型。
s.count();查找这个元素出现的次数,返回0或1。
s.insert( )在容器中插入一个元素。
s.erase( )删除容器当前的这个元素。
s.begin( ) 返回set容器的第一个元素。
s.end( ) 返回set容器的最后一个元素。
s.clear( ) 删除set容器中的所有的元素。
s.empty( ) 判断set容器是否为空。
s.size( ) 当前set容器中的元素个数。 对于set<int> s;的过程相当于把容器清空了一遍,因为这点wa了两次,写在循环中就通过了,也可以用s.clear()来删除。
#includeusing namespace std;const int maxn = 1e6+5;int a[maxn];int main(){ int T,n,L,R,ans; scanf("%d",&T); while(T--){ set s; scanf("%d",&n); for(int i=0;i