Problem

1 /10


在 C++ 中设置

Theory Click to read/hide

C++ 中的集合

集(集) —它是一个自动按升序对添加的元素进行排序的容器。但是当添加相同的值时,set 只会存储它的一个实例(multiset - multiset- 可能包含重复项)。当一个新元素添加到集合中时,它会立即归位,以免违反排序顺序。  

C++中的集合在STL标准模板库中通过类set (multiset)定义。

集合是二叉红黑树。 搜索、删除和插入操作具有对数复杂度。
 
要使用集合,您需要包含“集合”库: #include <设置>;
设置声明:
设置<整数>我的设置; // 声明一个空集。 多集;我的设置; // 声明一个空的多重集。  
处理集合(set)的函数
 
empty() - 检查容器中是否缺少元素
 
size() - 返回容器中元素的数量
 
clear() - 清除容器
 
insert() - 插入元素
 
erase() - 删除元素
 
count() - 返回与给定键匹配的元素数
 
find() - 查找具有特定键的元素
 
lower_bound() - 返回第一个不小于给定值的元素的迭代器
 
upper_bound() - 返回第一个大于指定值的元素的迭代器
 

 
集合和多重集合示例
#include ; #include <设置>; 使用命名空间标准; 主函数() { 设置<整数>我的设置1; //声明一个空集 多集;我的设置2; // 声明一个空的多重集 // 向集合中添加元素 mySet1.insert(1); mySet1.insert(2); mySet1.insert(3); mySet1.insert(1); // 向多集添加元素 mySet2.insert(1); mySet2.insert(2); mySet2.insert(3); mySet2.insert(1); 设置::迭代器它; //创建一个迭代器 for(it = mySet1.begin(); it != mySet1.end(); it++) { // 显示所有元素 输出 << (*它) << “ "; // 套 } 输出 <<结束; for(it = mySet2.begin(); it != mySet2.end(); it++) { // 输出所有元素 输出 << (*它) << “ "; // 多重集 } 返回 0; }

Problem

输入
给定一个数字 N (1 <= N <= 100000) –请求的数量。接下来的 N 行包含字符 ‘+’或 ‘-’和数字 a (1 <= a <= 1000000000)。如果符号 – ‘+’,则数字a被添加到集合中,否则–删除之前添加的所有 a 值。
保证当一个数字被删除时,它包含在集合中。

印记
要求所有查询完成后,按升序显示集合中所有唯一的元素,如果集合中没有元素,则显示“-1”。

 
例子
<头> <正文>
# 输入 输出
1
3
+1
+2
-1
2
2
3
+1
+1
-1
-1
3
3
+1
+1
+1
1