SET的用法

begin() 返回指向第一个元素的迭代器

 

clear() 清除所有元素

 

count() 返回某个值元素的个数

 

empty() 如果集合为空,返回true

 

end() 返回指向最后一个元素的迭代器

 

equal_range() 返回集合中与给定值相等的上下限的两个迭代器

 

erase() 删除集合中的元素

 

find() 返回一个指向被查找到元素的迭代器

 

get_allocator() 返回集合的分配器

 

insert() 在集合中插入元素

 

lower_bound() 返回指向大于(或等于)某值的第一个元素的迭代器

 

key_comp() 返回一个用于元素间值比较的函数

 

max_size() 返回集合能容纳的元素的最大限值

 

rbegin() 返回指向集合中最后一个元素的反向迭代器

 

rend() 返回指向集合中第一个元素的反向迭代器

 

size() 集合中元素的数目

 

swap() 交换两个集合变量

 

upper_bound() 返回大于某个值元素的迭代器

 

value_comp() 返回一个用于比较元素间的值的函数

BZOJ p2761 

#include <cstdio>
#include <cstring>
#include <set>
const int maxn=50010;
using namespace std;
int n,m,t; int tmp;
int ans[maxn+1];
int main()
  { scanf("%d",&t);    
    while (t--)
     {  set<int>S; int tt=0;
         scanf("%d",&n);
         for (int i=1;i<=n;i++)
          { scanf("%d",&tmp);
            if (S.count(tmp)<1)  
              ans[++tt]=tmp,S.insert(tmp);
            }
        for (int i=1;i<=tt;i++)
          if (i!=tt) printf("%d ",ans[i]);
          else printf("%d\n",ans[i]);
       }
  }
View Code

BZOJ p1208

#include<cstdio>
#include<set>
using namespace std;
const int inf=~0U>>2;
typedef set<int>::iterator sit;
set<int> s;

int main()
  {int n,a,b,ans=0,type;
   scanf("%d",&n);
   s.insert(inf); s.insert(-inf);
   while (n--)
    {scanf("%d%d",&a,&b); 
     if (s.size()==2)type=a,s.insert(b);
     else if(type==a)s.insert(b);
     else
     {sit i=s.lower_bound(b);
      int r=*i-b,l=b-*(--i);
      if (l<=r)  ans+=l,s.erase(i);
      else ans+=r,s.erase(++i);
      ans%=1000000;}
    }
   printf("%d\n",ans);
  }
View Code

 

posted @ 2014-04-01 16:13  william's blog  阅读(677)  评论(0编辑  收藏  举报

adopt your own virtual pet!