码迷,mamicode.com
首页 > 其他好文 > 详细

set

时间:2017-08-06 20:54:08      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:font   pre   for   判断   max   c++   r++   mon   output   

  Description
  对于给出的一串数字,求出该串中最长的连续并且每个数仅出现一次的子序列。
  
  Input
  1
  5
  1
  2
  3
  2
  1
 
 Output
  3
 
  由于数据范围很大 0~1e9,查找到一个数遍历一遍1e9不现实,这样就需要一种快速识别这个数是否出现过的方法。
  就学习了一下set这个容器。
 
  定义好set< > s; <>里面为容器的类型。
  s.count();查找这个元素出现的次数。
  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()来删除。
  
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+5;
int a[maxn];

int main(){
	int T,n,L,R,ans;
	scanf("%d",&T);
	while(T--){
		set<int> s;
		scanf("%d",&n);
		for(int i=0;i<n;i++){
			scanf("%d",&a[i]);
		}
		sort(a,a+n);
		L = R = 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]);
			L++;
		}
		printf("%d\n",ans);
	}
	return 0;
}

 

 

set

标签:font   pre   for   判断   max   c++   r++   mon   output   

原文地址:http://www.cnblogs.com/gjy963478650/p/7295709.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!