Problem B
Binärt sökträdsoperationer 2
Languages
en
sv
Din uppgift är att implementera en datastruktur som hanterar tre operationer: insättning av ett tal, kontroll om ett tal existerar i strukturen, och ta bort ett tal.
Mer i detalj ska datastrukturen stödja följande tre operationer:
-
insert(k) - Lägg till ett positivt heltal $k$ i datastrukturen. Om talet redan finns i datastrukturen, ska det inte läggas till flera gånger.
-
exist(k) - Kontrollera om ett positivt heltal $k$ redan finns i datastrukturen. Skriv ut 1 om det finns, annars 0.
-
remove(k) - Ta bort ett positivt heltal $k$ från datastrukturen. Om talet inte finns i datastrukturen, behövs ingenting att göras.
Efter alla operationer ska programmet skriva ut alla tal som finns i strukturen i sorterad ordning.
Dessa operationer ska kunna utföras effektivt.
Indata
Första raden av indatan består av ett heltal $N$ $(1 \leq N \leq 5 \cdot 10^5)$, antalet operationer som ska utföras av sort $1$ eller $2$.
De följande $N$ raderna beskriver en operation var. Det finns tre typer av operationer:
-
”1 k”, som representerar operationen insert(k) $(0 \leq k \leq 10^9)$, som beskrivet ovan.
-
”2 k”, som representerar operationen exist(k) $(0 \leq k \leq 10^9)$, som beskrivet ovan.
-
”3 k”, som representerar operationen remove(k) $(0 \leq k \leq 10^9)$, som beskrivet ovan.
Utdata
För varje operationer som börjar på ”2” (exist(k)-operationen), ska programmet skriva ut 1 om talet $k$ existerar i datastrukturen, och 0 annars. Svara på varje fråga i samma ordning som de förekommer i indatan, en per rad.
Efter alla operationer ska programmet även skriva ut alla tal som finns i datastrukturen på en ny rad, sorterade i ökande ordning, separerade med mellanslag.
Poängsättning
Din lösning kommer att testas på en mängd testfallsgrupper. För att få poäng för en grupp så måste du klara alla testfall i gruppen.
Grupp |
Poäng |
Gränser |
$1$ |
$50$ |
$N \leq 2000$. |
$2$ |
$50$ |
Inga ytterligare begränsningar. |
Förklaring av Exempelfall 3
Efter första operationen insert(5) innehåller datastrukturen talet 5.
Efter insert(10) innehåller datastrukturen talen 5 och 10.
exist(5) returnerar 1 eftersom talet 5 finns i datastrukturen.
exist(7) returnerar 0 eftersom talet 7 inte finns i datastrukturen.
insert(7) lägger till talet 7.
exist(7) returnerar 1 eftersom talet 7 nu finns i datastrukturen.
remove(5) tar bort talet 5.
exist(5) returnerar 0 eftersom talet 5 inte finns i datastrukturen.
Sample Input 1 | Sample Output 1 |
---|---|
6 1 5 1 10 2 5 2 7 1 7 2 7 |
1 0 1 5 7 10 |
Sample Input 2 | Sample Output 2 |
---|---|
5 2 10 1 10 2 10 1 10 2 10 |
0 1 1 10 |
Sample Input 3 | Sample Output 3 |
---|---|
8 1 5 1 10 2 5 2 7 1 7 2 7 3 5 2 5 |
1 0 1 0 7 10 |