Problem

1 /10


Conjuntos en C++

Theory Click to read/hide

Conjuntos en C++

Establecer (establecer) — es un contenedor que ordena automáticamente los elementos añadidos en orden ascendente. Pero al agregar valores idénticos, set solo almacenará una instancia del mismo (multiset - multiset- puede contener duplicados). Cuando se agrega un nuevo elemento al conjunto, inmediatamente encaja en su lugar para no violar el orden de clasificación.  

Los conjuntos en C++ se definen en la biblioteca de plantillas estándar STL a través de la clase set (multiset).

Los conjuntos son árboles binarios rojo-negro. Las operaciones de búsqueda, eliminación e inserción tienen una complejidad logarítmica.
 
Para usar conjuntos, debe incluir la biblioteca “set”: #incluir <establecer>
Establecer declaración:
establecer<int> miConjunto; // Declarar un conjunto vacío. multiconjunto<int> miConjunto; // Declarar un conjunto múltiple vacío.  
Funciones para trabajar con un conjunto (set)
 
empty() - comprueba la ausencia de elementos en el contenedor
 
size() - Devuelve el número de elementos en el contenedor
 
clear() - Borra el contenedor
 
insert() - Inserta elementos
 
erase() - Elimina elementos
 
count() - Devuelve el número de elementos que coinciden con una clave determinada
 
find() - Encuentra un elemento con una clave específica
 
lower_bound() - Devuelve un iterador al primer elemento no menor que el valor dado
 
upper_bound() - Devuelve un iterador al primer elemento mayor que el valor especificado
 

 
Ejemplo de set y multiset
#incluye <iostream> #incluir <establecer> utilizando el espacio de nombres estándar; int principal() { establecer<int> miConjunto1; // declaró un conjunto vacío multiconjunto<int> miConjunto2; // declaró un multiconjunto vacío // agregar elementos al conjunto miConjunto1.insertar(1); miConjunto1.insertar(2); miConjunto1.insertar(3); miConjunto1.insertar(1); // agregar elementos al conjunto múltiple miConjunto2.insertar(1); miConjunto2.insertar(2); miConjunto2.insertar(3); miConjunto2.insertar(1); establecer<int>::iterarlo; //crear un iterador for(it = mySet1.begin(); it != mySet1.end(); it++) { // Mostrar todos los elementos cout << (*it) << " "; // conjuntos } cout << fin; for(it = mySet2.begin(); it != mySet2.end(); it++) { // Muestra todos los elementos cout << (*it) << " "; // multiconjuntos } devolver 0; }

Problem

Entrada
Dado un número N (1 <= N <= 100000) – número de solicitudes. Las siguientes líneas N contienen el carácter ‘+’ o ‘-’ y el número a (1 <= a <= 1000000000). Si el símbolo – ‘+’, luego se agrega el número a al conjunto, de lo contrario – elimina todos los valores a que se agregaron previamente.
Se garantiza que cuando se elimina un número, se incluye en el conjunto.

Impresión
Se requiere mostrar en orden ascendente todos los elementos únicos en el conjunto después de completar todas las consultas, o "-1" si no hay elementos en el conjunto.

 
Ejemplos
# Entrada Salida
1
3
+1
+2
-1
2
2
3
+1
+1
-1
-1
3
3
+1
+1
+1
1