Zadanie
Jaroslavov darček
Počet bodov: 75
Za chvílu sú Vianoce!
Tešia sa všetci, a najmä Jaroslav.
A nič nepokazí pekné vianoce ako riadne náročná domáca úloha na zimné prázdniny.
Jaroslav nanešťastie práve takú dostal. Napadlo ho však kreatívne riešenie - vypýta si vypracovanú úlohu už od Santa Clausa, a potom si môže predvianočný čas pokojne užívať.
Santa si nervózne číta Jaroslavov zoznam prianí, ktorý mu doniesli vystrašení škriatkovia. Hasičské autíčko v detskej veľkosti, mobil ktorému nedochádza baterka, striebornú rybičku… domácu úlohu?
A škriatkovia mu už do ruky vtískajú priloženú obálku s domácou úlohou z informatiky. Santa Claus je však dosť staromódny, a informatike sa nerozumie.
Jaroslav však bol na zozname dobrých detí, tak jeho želania treba splniť!
Nakoniec však prišiel s riešením - pomocní škriatkovia nie sú zas tak odlišní od riešiteľov Zenitu, môžu mu s ňou predsa pomôcť…
Úloha
Zadefinujeme si najprv niekoľko pojmov.
Halda je zakorenený strom, v ktorom majú vrcholy hodnoty. Hodnoty v synoch vrchola sú menšie ako jeho hodnota. Vďaka tomu je napríklad v koreni stromu vždy najväčšia hodnota.
Binárny vyhľadávací strom je strom, v ktorom majú vrcholy nápisy. Každý vrchol môže mať ľavého a/alebo pravého syna, a platí že všetky nápisy v jeho ľavom podstrome sú menšie ako jeho nápis, a všetky nápisy v jeho pravom podstrome sú väčšie ako jeho nápis.
Strom v ktorom majú vrcholy aj hodnoty aj nápisy, a je zároveň Haldou a Binárnym vyhľadávacím stromom, sa nazýva Treap.
Jaroslavova domáca úloha je jednoduchá - dostal nejaké vrcholy s navzájom rôznymi nápismi a hodnotami, a má z nich postaviť Treap.
Vstup a Výstup
V prvom riadku vstupu je číslo \(t\) - počet zadaní Jaroslavovych úloh.
Každá úloha je popísaná dvoma riadkami - v prvom riadku je číslo \(n\) - počet vrcholov ktoré Jaroslav dostal - a v druhom riadku sú tieto vrcholy v tvare <napis>/<hodnota>
.
Pre každú domácu úlohu vypíšte Treap týchto vrcholov vo formáte (<lavy podstrom><napis>/<hodnota><pravy podstrom>)
. Podstromy sa vypisujú rekurzívne, a nie ak sú prázdne. Pozrite si príklady.
Platí \(1 \leq t \leq 69\), \(1 \leq n \leq 50\,000\), \(1 \leq |napis| \leq 5\), \(0 \leq hodnota \leq 100\,000\), a súčet \(n\) v jednom vstupe bude \(\leq 200\,000\).
Nápisy aj hodnoty sú navzájom rôzne. Nápisy sú z malých písmen anglickej abecedy.
Sú dve sady vstupov. V prvej navyše platí \(n \leq 1000\).
Príklad
Input:
3
7
abcd/7 bcde/6 ccc/5 dada/4 este/3 fuha/2 good/1
7
anna/1 betka/2 cyril/3 dorka/4 egor/5 fezjo/6 greta/7
7
ahaha/3 bebe/6 cici/4 dodo/7 ehehe/2 fufu/5 gaga/1
Output:
(abcd/7(bcde/6(ccc/5(dada/4(este/3(fuha/2(good/1)))))))
(((((((anna/1)betka/2)cyril/3)dorka/4)egor/5)fezjo/6)greta/7)
(((ahaha/3)bebe/6(cici/4))dodo/7((ehehe/2)fufu/5(gaga/1)))
Pre odovzdávanie sa musíš prihlásiť.