Tagy: treap
Obtiažnosť: ťažká

Lepší simple set 1

Zadanie týchto troch úloh je rovnaké, ako zadania úloh pre binárny vyhľadávací strom z kurzu Dátové štruktúry 1. V týchto úlohách sú však inak štruktúrované vstupy, a preto ti BST neprejde.

Pravdepodobne ste už používali set (množina) v C++ alebo v Pythone. Je to dátová štruktúra, s ktorou je možné robiť dve základné operácie:

  • Zistiť, či sa prvok nachádza v množine.
  • Vložiť prvok do množiny.

V obyčajnej množine navyše platí, že každý prvok sa v nej nachádza najviac raz. Ak by sme chceli nejaký prvok vložiť dvakrát, druhý pokus nebude mať žiaden efekt (prvok sa v množine bude stále nachádzať len raz).

V tejto úlohe však nepoužívajte set zo štandardných knižníc. Namiesto toho si naprogramujte vlastnú dátovú štruktúru.

Úloha

Budete dostávať dva typy požiadaviek:

  • Zistite, či sa číslo nachádza v množine.
  • Vložte číslo do množiny.

Na každú požiadavku prvého typu treba odpovedať YES, ak sa prvok nachádza v množine (bol už vložený), inak NO.

Vstup

Na prvom riadku je číslo $n$ ($1 \leq n \leq 10^5$) ­— počet požiadaviek.

Na ďalších $n$ riadkoch sú popisy jednotlivých požiadaviek. Na $i$-tom riadku sú dve čísla $t_i$ a $x_i$ popisujúce $i$-tu požiadavku.

Ak $t_i = 1$, tak sa jedná o požiadavku prvého typu. Na túto požiadavku treba odpovedať, či sa číslo $x_i$ nachádza v množine.

Ak $t_i = 2$, tak sa jedná o požiadavku druhého typu a číslo $x_i$ treba vložiť do množiny.

Platí $t_i \in {1, 2}$ a $1 \leq x_i \leq 10^9$.

Výstup

Pre každú požiadavku prvého typu vypíšte jeden riadok a na ňom reťazec \texttt{YES}, ak sa dané číslo nachádza v množine, inak reťazec \texttt{NO}.

Príklad

Vstup

8
2 5
2 4
2 8
1 2
1 3
1 4
2 3
1 3

Výstup

NO
NO
YES
YES

V druhej požiadavke prvého typu sa ešte číslo $3$ v množine nenachádzalo, no pri spracúvaní poslednej požiadavky už áno.