Problem

1 /10


Imposta in C++

Theory Click to read/hide

Insiemi in C++

Imposta (imposta) — è un contenitore che ordina automaticamente gli elementi aggiunti in ordine crescente. Ma quando si aggiungono valori identici, set ne memorizzerà solo un'istanza (multiset - multiset- può contenere duplicati). Quando un nuovo elemento viene aggiunto all'insieme, va immediatamente a posto in modo da non violare l'ordinamento.  

Gli insiemi in C++ sono definiti nella libreria di modelli standard STL tramite la classe set (multiset).

Gli insiemi sono alberi binari rosso-neri. Le operazioni di ricerca, eliminazione e inserimento hanno una complessità logaritmica.
 
Per utilizzare i set, devi includere la libreria “set”: #include <imposta>
Imposta dichiarazione:
imposta<int> mioSet; // Dichiarazione di un insieme vuoto. multiinsieme<int> mioSet; // Dichiarazione di un multiset vuoto.  
Funzioni per lavorare con un set (set)
 
empty() - verifica l'assenza di elementi nel contenitore
 
size() - Restituisce il numero di elementi nel contenitore
 
clear() - Cancella il contenitore
 
insert() - Inserisce elementi
 
erase() - Rimuove gli elementi
 
count() - Restituisce il numero di elementi corrispondenti a una data chiave
 
find() - Trova un elemento con una chiave specifica
 
lower_bound() - Restituisce un iteratore al primo elemento non inferiore al valore dato
 
upper_bound() - Restituisce un iteratore al primo elemento maggiore del valore specificato
 

 
Esempio di insiemi e multiinsiemi
#include <iostream> #include <imposta> utilizzando lo spazio dei nomi std; int principale() { imposta<int> mioSet1; // ha dichiarato un insieme vuoto multiinsieme<int> mioSet2; // ha dichiarato un multiset vuoto // aggiunge elementi all'insieme mySet1.insert(1); mioInsieme1.insert(2); mioSet1.insert(3); mySet1.insert(1); // aggiunge elementi al multiset mySet2.insert(1); mioInsieme2.insert(2); mySet2.insert(3); mySet2.insert(1); set<int>::iterator it; // crea un iteratore for(it = mySet1.begin(); it != mySet1.end(); it++) { // Visualizza tutti gli elementi cout << (*it) << " "; // imposta } cout << finel; for(it = mySet2.begin(); it != mySet2.end(); it++) { // Output di tutti gli elementi cout << (*it) << " "; // multiset } ritorno 0; }

Problem

Inserimento
Dato un numero N (1 <= N <= 100000) – numero di richieste. Le seguenti righe N contengono il carattere ‘+’ o ‘-’ e il numero a (1 <= a <= 1000000000). Se il simbolo – ‘+’, quindi il numero a viene aggiunto all'insieme, altrimenti – rimuove tutti i valori a precedentemente aggiunti.
È garantito che quando un numero viene rimosso, è contenuto nel set.

Impressum
È necessario visualizzare in ordine crescente tutti gli elementi univoci nell'insieme dopo che tutte le query sono state completate, o "-1" se non ci sono elementi nell'insieme.

 
Esempi
# Input Uscita
1
3
+1
+2
-1
2
2
3
+1
+1
-1
-1
3
3
+1
+1
+1
1