eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Создание Бинарного Дерева Поиска

Создание Бинарного Дерева Поиска

Бинарным деревом поиска (\textbf{БДП}) является дерево с корнем, обладающее следующими свойствами: \begin{itemize} \item Левое поддерево содержит только вершины, значения которых строго меньшие корня. \item Правое поддерево содержит только вершины, значения которых строго больше корня. \item Все значения вершин разные. \item Левое и правое поддерево рекурсивно является бинарным деревом поиска. \end{itemize} При вставке новой вершины запускается следующий алгоритм: \begin{enumerate} \item Если дерево пустое, то новая вершина становится корнем и процесс вставки заканчивается. Иначе перейти на шаг \textbf{2}. \item Объявим текущей вершиной корень дерева. \item Если значение новой вершины меньше корня, то: \begin{itemize} \item Если левое поддерево корня пусто, то установим новую вершину левым сыном корня и останавливаемся. \item Иначе установим текущей вершиной корень левого поддерева и повторим шаг \textbf{3}. \end{itemize} \item Если значение новой вершины больше корня, то: \begin{itemize} \item Если правое поддерево корня пусто, то установим новую вершину правым сыном корня и останавливаемся. \item Иначе установим текущей вершиной корень правого поддерева и повторим шаг \textbf{3}. \end{itemize} \end{enumerate} Структура БДП зависит от входной последовательности. Разные последовательности могут порождать разные структуры, несмотря на то, что числа в них одинаковые. Рассмотрим последовательность \textbf{1} \textbf{2} \textbf{3}. Получим следующее БДП: \includegraphics{https://static.e-olymp.com/content/aa/aacfb5495e16cf9a9ff0de6ddfaadb5c0e480c5c.jpg} Если входная последовательность имеет вид \textbf{2} \textbf{1} \textbf{3}, то получим дерево \includegraphics{https://static.e-olymp.com/content/bd/bde2d8a71d1925e70c02c11d4c8a899f3b44786c.jpg} С другой стороны, разные входные данные могут порождать одинаковые БДП структуры. Например, входная последовательность \textbf{2} \textbf{1} \textbf{3} породит ту же структуру БДП, что и последовательность \textbf{4} \textbf{6} \textbf{2}. Дерево будет иметь вид: \includegraphics{https://static.e-olymp.com/content/81/81416f010093212239d97b6e8dfc9d6027f0d20e.jpg} По заданным \textbf{n} вершинам БДП определить, сколько различных входных последовательностей образуют ту же самую БДП структуру, что и заданная. Вершины дерева принимают значения из диапазона \textbf{1}..\textbf{m}. \InputFile Первая строка содержит количество тестов \textbf{t} (\textbf{t} ≤ \textbf{100}). Каждый тест начинается с двух целых чисел \textbf{n} и \textbf{m} (\textbf{1}\textit{ }≤ \textbf{n} ≤ \textbf{m} ≤ \textbf{1000}) - количество вершин в БДП и максимальное значение диапазона соответственно. Следующая строка содержит \textbf{n} целых чисел \textbf{a_i} (\textbf{1} ≤ \textbf{a}_\{i \}≤ \textbf{1000}) - последовательность, из которой строится БДП. \OutputFile Для каждого теста вывести количество разных последовательностей, образующих ту же самую БДП структуру, что и входная последовательность. Вершины дерева принимают значения из диапазона \textbf{1}..\textbf{m}. Результат следует выводить по модулю \textbf{1000003}. \textit{\textbf{Примечание}}: Объяснение второго теста. Имеется \textbf{8} входных последовательностей (данные взяты из промежутка \textbf{1}..\textbf{4}), которые формируют одну и ту же структуру БДП: \begin{enumerate} \item \textbf{2 1 3} \item \textbf{2 3 1} \item \textbf{2 1 4} \item \textbf{2 4 1} \item \textbf{3 1 4} \item \textbf{3 4 1} \item \textbf{3 2 4} \item \textbf{3 4 2} \end{enumerate}
Лимит времени 1 секунда
Лимит использования памяти 64 MiB
Входные данные #1
3
3 4
3 1 4
3 5
1 2 3
4 4
2 1 10 3
Выходные данные #1
8
10
3