Problem

1 /10


Ensembles en C++

Theory Click to read/hide

Ensembles en C++

Définir (définir) — c'est un conteneur qui trie automatiquement les éléments ajoutés par ordre croissant. Mais lors de l'ajout de valeurs identiques, set n'en stockera qu'une seule instance (multiset - multiset- peut contenir des doublons). Lorsqu'un nouvel élément est ajouté à l'ensemble, il se met immédiatement en place afin de ne pas violer l'ordre de tri.  

Les ensembles en C++ sont définis dans la bibliothèque de modèles standard STL via la classe set (multiset).

Les ensembles sont des arbres binaires rouge-noir. Les opérations de recherche, de suppression et d'insertion ont une complexité logarithmique.
 
Pour utiliser des ensembles, vous devez inclure la bibliothèque “set” : #include <set>
Définir la déclaration :
définir<int> monEnsemble ; // Déclaration d'un ensemble vide. multiset<int> monEnsemble ; // Déclaration d'un multiset vide.  
Fonctions pour travailler avec un ensemble (set)
 
empty() - vérifie l'absence d'éléments dans le conteneur
 
size() - Renvoie le nombre d'éléments dans le conteneur
 
clear() - Efface le conteneur
 
insert() - Insère des éléments
 
erase() - Supprime des éléments
 
count() - Renvoie le nombre d'éléments correspondant à une clé donnée
 
find() - Trouve un élément avec une clé spécifique
 
lower_bound() - Renvoie un itérateur au premier élément au moins égal à la valeur donnée
 
upper_bound() - Renvoie un itérateur au premier élément supérieur à la valeur spécifiée
 

 
Exemple d'ensemble et de multiensemble
#include <iostream> #include <set> en utilisant l'espace de noms std ; int main() { définir<int> monEnsemble1 ; // a déclaré un ensemble vide multiset<int> monEnsemble2 ; // a déclaré un multiset vide // ajoute des éléments à l'ensemble monEnsemble1.insert(1); monEnsemble1.insert(2); monEnsemble1.insert(3); monEnsemble1.insert(1); // ajoute des éléments au multiset monEnsemble2.insert(1); monEnsemble2.insert(2); monEnsemble2.insert(3); monEnsemble2.insert(1); set<int>::iterator it ; // crée un itérateur for(it = mySet1.begin(); it != mySet1.end(); it++) { // Afficher tous les éléments cout << (*il) << " "; // ensembles } cout << fin ; for(it = mySet2.begin(); it != mySet2.end(); it++) { // Afficher tous les éléments cout << (*il) << " "; // multiensembles } renvoie 0 ; }

Problem

Entrée
Soit un nombre N (1 <= N <= 100000) – nombre de demandes. Les lignes N suivantes contiennent le caractère ‘+’ ou ‘-’ et le nombre a (1 <= a <= 1000000000). Si le symbole – ‘+’, alors le nombre a est ajouté à l'ensemble, sinon – supprime toutes les valeurs a qui ont été ajoutées précédemment.
Il est garanti que lorsqu'un numéro est supprimé, il est contenu dans l'ensemble.

Mentions légales
Il est nécessaire d'afficher dans l'ordre croissant tous les éléments uniques de l'ensemble une fois toutes les requêtes terminées, ou "-1" s'il n'y a aucun élément dans l'ensemble.

 
Exemples
3
+1
+2
-1
3
+1
+1
-1
3
+1
+1
+1
# Entrée Sortie
1 2
2 -1
3 1