eolymp
bolt
Try our new interface for solving problems
Problems

Ксоня та дерево

Ксоня та дерево

У Ксоні є кореневе дерево з $n$ вершин з коренем у вершині $1$, де на кожній вершині записано число. На $i$-й вершині записано число $a_i$. Нагадаємо, що деревом називається зв'язний граф без циклів. Кореневим деревом називається дерево, в якому вибрана одна вершина --- корінь. Предком вершини $v$ в кореневому дереві називають усі вершини, які лежать на шляху від $v$ до кореня крім самої вершини $v$. Піддеревом вершини $v$ називають множину всіх вершин, для яких $v$ є предком і саму вершину $v$. XOR сумою множини $S = (u_1, u_2, u_3, \dots, u_k)$ називається число $u_1 \oplus u_2 \oplus u_3 \oplus \dots \oplus u_k$, де $\oplus$ --- операція побітової виключної диз'юнкції, яка позначається як <<xor>> в мові Pascal і <<\^>> в мовах C++/Java/Python. Для множини чисел $S$ розглянемо множину XOR-сум усіх можливих підмножин $S$. Назвемо цю множину $F(S)$. Друг Ксоні постійно питає в неї питання --- "Якщо розглянути множину всіх чисел, записаних в піддереві вершини $v$ (назвемо її $U_v$), то яке число в множині $F(U_v)$ буде $k$-е за зростанням?". Тобто, якщо взяти всі числа з піддерева вершини $v$, розглянути всі XOR-суми їх підмножин, то яке число в отриманій множині буде на $k$-му місці за зростанням? Якщо такого числа немає ($k > |F(U_v)|$), то Ксоня відповідає числом $-1$. Зверніть увагу, що $F(U_v)$ --- множина, а не мультимножина. Тобто, якщо одне число зустрічається кілька разів, то його потрібно враховувати лише один раз. Також, іноді друг Ксоні просить її змінити одне з чисел в дереві. \InputFile Перший рядок містить два цілі числа $n, g$ ($2 \leq n \leq 5 \cdot 10^4$, $0 \leq g \leq 7$) --- кількість вершин в дереві та номер групи. Кожен з наступних $n - 1$ рядків містить по два цілі числа $x_i, y_i$ ($ 1 \leq x_i, y_i \leq n$). Це означає, що в дереві проведено ребро між вершинами $x_i$ і $y_i$. Гарантується, що граф --- дерево. Наступний рядок містить $n$ цілих чисел $a_1, a_2, \dots, a_n$ ($0 \leq a_i < 2^{20}$) --- масив $a$ початкових чисел на вершинах дерева. Наступний рядок містить одне ціле число $q$ ($1 \leq q \leq 5 \cdot 10^4$) --- кількість запитів. Кожен з наступних $q$ рядків описує один запит. Запити на зміну числа в дереві мають вигляд $1 \ x_i \ y_i$ ($1 \leq x_i \leq n$, $ 0 \leq y_i < 2^{20}$). Такий запит означає, що тепер на $x_i$-й вершині записано число $y_i$. Запити іншого типу мають вигляд $2 \ v_i \ k_i$ ($1 \leq v_i \leq n$, $1 \leq k_i \leq 10^9$). Такий запит означає, що потрібно знайти $k_i$-те за зростанням число у множині $F(U_{v_i})$, де $U_{v_i}$ --- множина чисел в піддереві вершини $v_i$, а $F(U_{v_i})$ --- множина усіх можливих XOR-сум її підмножин. Якщо $k_i > |F(U_{v_i})|$, виведіть $-1$. \OutputFile На кожний запит другого типу виведіть відповідь в окремому рядку. \Note Пояснення першого прикладу. Числа біля вершин --- $a_i$. \begin{center} \includegraphics[scale = 0.5]{https://static.eolymp.com/content/1d/1ddd28c4ecb94ba9b24bfa8357afd60e.png} \end{center} В першому запиті розглядається піддерево вершини $2$. Воно містить числа $1, 2, 3$. $F([1,2,3]) = [0, 1, 2, 3]$. В другому запиті розглядається все піддерево. $F([1, 2, 3, 4]) = [0,1,2,3,4,5,6,7]$. Після зміни одного числа дерево має такий вигляд. \begin{center} \includegraphics[scale = 0.5]{https://static.eolymp.com/content/aa/aab9478611534a5ea34157c24924a8a6.png} \end{center} Тепер в піддереві вершини $2$ числа $1, 2, 4$. $F([1,2,4]) = [0,1,2,3,4,5,6,7]$. \Scoring \begin{enumerate} \item ($6$ балів): $q, n \leq 15$. \item ($16$ балів): $q, n \leq 500$. \item ($18$ балів): $q, n \leq 2000$. \item ($7$ балів): У всіх запитах другого типу $v_i = 1$. \item ($13$ балів): Немає запитів на зміну числа. \item ($11$ балів): Всі $a_i, y_i$ --- степені числа 2. \item ($29$ балів): Без додаткових обмежень. \end{enumerate}
Time limit 5 seconds
Memory limit 256 MiB
Input example #1
5 0
1 2
1 5
2 3
2 4
4 2 3 1 2
7
2 2 4
2 1 2
2 2 3
1 3 4
2 5 1
2 2 8
2 1 5
Output example #1
3
1
2
0
7
4
Author Sviatoslav Bidzilia
Source Всеукраїнська олімпіада з інформатики 2021-2022, III етап