eolymp
bolt
Try our new interface for solving problems
Problems

Декартово дерево

Декартово дерево

Вам даны пары чисел (\textbf{a_i}, \textbf{b_i}), Вам необходимо построить декартово дерево, такое что \textbf{i}-ая вершина имеет ключи (\textbf{a_i}, \textbf{b_i}), вершины с ключом \textbf{a_i} образуют бинарное дерево поиска, а вершины с ключом \textbf{b_i} образуют кучу. \InputFile В первой строке записано число \textbf{N} - количество пар. Далее следует \textbf{N} (\textbf{1} ≤ \textbf{N} ≤ \textbf{50000}) пар (\textbf{a_i}, \textbf{b_i}). Для всех пар |\textbf{a_i}|, |\textbf{b_i}| ≤ \textbf{30000}. \textbf{a_i} ≠ \textbf{a_j} и \textbf{b_i} ≠ \textbf{b_j} для всех \textbf{i} ≠ \textbf{j}. \OutputFile Если декартово дерево с таким набором ключей построить возможно, выведите в первой строке \textbf{YES}, в противном случае выведите \textbf{NO}. В случае ответа \textbf{YES}, выведите \textbf{N} строк, каждая из которых должна описывать вершину. Описание вершины состоит из трёх чисел: номер предка, номер левого сына и номер правого сына. Если у вершины отсутствует предок или какой-либо из сыновей, то выводите на его месте число \textbf{0}. Если подходящих деревьев несколько, выведите любое.
Time limit 2 seconds
Memory limit 64 MiB
Input example #1
7
5 4
2 2
3 9
0 5
1 3
6 6
4 11
Output example #1
YES
2 3 6
0 5 1
1 0 7
5 0 0
2 4 0
1 0 0
3 0 0