Un arbore binar este un arbore cu rădăcină în care fiecare nod are maxim fii. Un arbore binar de căutare (Binary Search Tree) este un arbore binar în care fiecare nod are asociată o valoare, iar valoarea unui nod este strict mai mare decât toate valorile din subarborele său stâng și strict mai mică decât toate valorile din subarborele său drept. Un exemplu de arbore binar de căutare este cel din stânga iar unul greșit în dreapta (deoarece se află în subarborele stâng al lui şi ).
Cerinţă
Cunoscând numerele naturale , şi un şir cu toate elementele numere naturale distincte nenule mai mici sau egale cu , vi se cere să numărați câți arbori binari de căutare există cu noduri având valorile asociate nodurilor (în orice ordine validă), astfel încât şirul să formeze un lanț în arbore în această ordine. De exemplu, pentru , , , arborele de mai sus din stânga este unul valid.
Date de intrare
Fișierul de intrare countbst.in
va conține pe prima linie un număr natural (numărul de teste), urmat de teste. Fiecare test va fi descris prin două linii:
- Pe prima linie se vor găsi două numere naturale și separate printr-un spaţiu.
- Pe linia a doua se vor găsi cele numere naturale nenule distincte separate şi urmate de un spaţiu.
Date de ieşire
Fișierul de ieșire countbst.out
va conține răspunsurile pentru fiecare dintre cele teste, câte unul pe linie: numărul de arbori binari de căutare ce conțin șirul de numere ca lanț, afișat modulo în ordinea testelor din fişierul de intrare.
Restricţii
Subtask 0 (3 puncte)
Subtask 1 (4 puncte)
Subtask 2 (7 puncte)
Subtask 3 (5 puncte)
Subtask 4 (6 puncte)
Subtask 5 (7 puncte)
Subtask 6 (8 puncte)
Subtask 7 (9 puncte)
Subtask 8 (50 puncte)
Subtask 9 (1 punct)
- Fără restricții suplimentare
Exemplu
countbst.in
2
10 3
2 7 5
10 5
1 7 4 6 2
countbst.out
84
0
Explicații
Pentru primul test avem arbori binari de căutare cu nodurile care conţin lanţul .
Pentru al doilea test, nu există niciun arbore binar de căutare valid.