QOJ.ac

QOJ

时间限制: 2 s 内存限制: 1024 MB 总分: 100 可 Hack ✓

#18669. Восстановление бинарного дерева поиска

统计

Чансол построил двоичное дерево поиска из $N$ узлов, на каждом из которых записано целое число. Двоичное дерево поиска — это такое двоичное дерево, что для каждого узла $i$ все числа в узлах левого поддерева $i$ меньше числа, записанного в узле $i$, а все числа в узлах правого поддерева $i$ больше числа, записанного в узле $i$.

Для каждого $i$ Чансол записал глубину $H_i$ узла $i$ в двоичном дереве поиска и целое число $A_i$, записанное в узле $i$ этого дерева. При этом все $A_i$ различны, а глубина корневого узла равна $1$ ($1 \le i \le N$).

Пока Чансол был на финале ICPC World Finals, двоичное дерево поиска потерялось. Помогите Чансолу восстановить двоичное дерево поиска, используя ранее записанные данные.

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

В первой строке задано количество узлов $N$ ($1 \leq N \leq 200\,000$).

В следующих $N$ строках задана информация об узлах дерева. Для каждого $1 \leq i \leq N$ в $(i+1)$-й строке через пробел заданы целое число $A_i$, записанное в узле $i$, и глубина $H_i$ узла $i$ ($-2\cdot 10^9 \leq A_i \leq 2\cdot 10^9$; $1 \leq H_i \leq N$). Все $A_i$ различны.

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

Если по заданным записям невозможно восстановить двоичное дерево поиска, выведите $-1$.

Если восстановление возможно, выведите структуру дерева в $N$ строках.

В $i$-й строке выведите номера левого и правого ребёнка узла $i$. Если ребёнка нет, выведите $-1$ в качестве номера этого ребёнка.

Если существует несколько возможных деревьев, можно восстановить любое из них.

Примеры

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

3
1 2
2 1
3 2

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

-1 -1
1 3
-1 -1

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

3
1 1
2 2
3 2

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

-1

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

3
2 2
5 3
4 2

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

-1

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

3
100 2
200 1
300 2

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

-1 -1
1 3
-1 -1

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.