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

Спільний предок - 3

Спільний предок - 3

Підвішене дерево - это орієнтовний граф без циклів, у якому у кожну вершину, крім однієї, яка називається коренем орієнтовного дерева, входить одне ребро. У корінь орієнтиовного дерева не входить жодного ребра. Батьком вершини називається вершина, ребро з якої входить у дану (по матеріалам Wikipedia). Задано набір підвішених дерев. Потрібно виконувати наступні операції: \begin{enumerate} \item \textbf{0 u v} - Для двох заданих вершин \textbf{u} та \textbf{v} вияснити, чи лежать вони у одному дереві. Якщо це так, вивести вершину, яка є їх найменшим спільним предком, інакше вивести \textbf{0}. \item \textbf{1 u v} - Для корня \textbf{u} одного з дерев та довільної вершини \textbf{v} іншого дерева додати ребро (\textbf{v}, \textbf{u}). В результаті ці два дерева з'єднаються в одне. \end{enumerate} Вам необхідно виконувати усі операции \textit{online}, тобто, ви зможете взнати наступний запит, лише виконавши попередній. \InputFile У першому рядку вхідного файлу знаходиться число \textbf{n} - сумарна кількість вершин у розглядуваних деревах (\textbf{1} ≤ \textbf{n} ≤ \textbf{50000}). У наступному рядку розміжено \textbf{n} чисел - предок кожної вершини у початковій конфігурації, або \textbf{0}, якщо відповідна вершина є коренем. Потім йде число \textbf{k} - кількість запитів у вашій програмі (\textbf{1} ≤ \textbf{k} ≤ \textbf{100000}). Кожен з наступних рядків містить по три цілих числа: вид запиту (\textbf{0} - для пошуку LCA або \textbf{1} - для додавання ребра) і два числа \textbf{x}, \textbf{y}. Вершини, які приймають участь у запиті, можна обчислити за наступними формулами: \textbf{u = (x - 1 + ans) mod n + 1}, \textbf{v = (y - 1 + ans) mod n + 1}, де \textbf{ans} - відповідь на останній запит типу \textbf{0}. \OutputFile Для кожного запиту типу \textbf{0}, виведіть у вихідний файл одне число у окремому рядку - відповідь на цей запит.
Ліміт часу 2 секунди
Ліміт використання пам'яті 256 MiB
Вхідні дані #1
5
0 0 0 0 0
12
1 5 3
0 2 5
1 4 2
1 1 5
0 1 5
1 3 4
0 1 5
0 3 1
0 4 2
0 1 4
0 5 2
0 4 1
Вихідні дані #1
0
5
5
3
2
3
3
2
Вхідні дані #2
10
0 1 7 8 1 5 5 7 0 1
8
1 9 5
0 6 7
0 10 8
0 1 5
0 2 4
0 2 9
0 9 3
0 10 3
Вихідні дані #2
5
5
1
5
7
1
1