Language:

English
Russian

Практикум по программированию

Для участников:
Регистрация  ||   Вход
Список соревнований
Вы не вошли в систему! Вход или регистрация.

Двоичное дерево

Time limit:1 sec.
Memory limit: 1048576 KByte

Одним из способов представления множеств в памяти компьютера является простое (несбалансированное) двоичное дерево поиска. Каждый узел данного дерева может иметь не более двух детей (левый и правый сын).

Вставка нового элемента x в дерево начинается с корневого узла. Сравним x с ключом в корне. Если они равны, то делать ничего не надо – элемент уже содержится в дереве. Если x меньше ключа в корне, то идём в левое поддерево, если больше – в правое. Продолжаем делать так до тех пор, пока идти станет больше некуда – в этом случае создаётся новый листовой узел.

На рисунке показано дерево, полученное из пустого дерева после вставки элементов 8, 5, 7, 11, 9, 3, 6.

Высотой дерева называется длина максимального пути от корня до листа. Например, для дерева на рисунке высота равна 3, так как путь от от корня до листа с ключом 6 имеет длину 3.

Вам дана последовательность элементов, которые поочерёдно вставлялись в изначально пустое дерево. Требуется найти его высоту.

Входные данные

В первой строке входных данных записано целое число N (1 ≤ N ≤ 105) – количество элементов. В следующей строке через пробел записаны N целых чисел – вставляемые элементы (все элементы не превышают по модулю 109).

Выходные данные

Выведите одно целое число – высоту дерева.

Примеры

Входные данные
7
8 5 7 11 9 3 6
Выходные данные
3
Входные данные
3
5 5 5
Выходные данные
0

Условия всех задач турнира (pdf)

© Copyright ВоГУ, АВТ, Носов Д.А., Смоленцев К.Н.