Lyft Level 5 Challenge 2018 - Final Round
D
Deduction Queries
Codeforces
2400
原题
← CE →
翻译中…

There is an array $a$ of $2^{30}$ integers, indexed from $0$ to $2^{30}-1$. Initially, you know that $0 \leq a_i \lt 2^{30}$ ($0 \leq i \lt 2^{30}$), but you do not know any of the values. Your task is to process queries of two types:

翻译中…
  • 1 l r x: You are informed that the bitwise xor of the subarray $[l, r]$ (ends inclusive) is equal to $x$. That is, $a_l \oplus a_{l+1} \oplus \ldots \oplus a_{r-1} \oplus a_r = x$, where $\oplus$ is the bitwise xor operator. In some cases, the received update contradicts past updates. In this case, you should ignore the contradicting update (the current update).
  • 2 l r: You are asked to output the bitwise xor of the subarray $[l, r]$ (ends inclusive). If it is still impossible to know this value, considering all past updates, then output $-1$.
翻译中…

Note that the queries are encoded. That is, you need to write an online solution.

翻译中…

Input

翻译中…

The first line contains a single integer $q$ ($1 \leq q \leq 2 \cdot 10^5$) — the number of queries.

翻译中…

Each of the next $q$ lines describes a query. It contains one integer $t$ ($1 \leq t \leq 2$) — the type of query.

翻译中…

The given queries will be encoded in the following way: let $last$ be the answer to the last query of the second type that you have answered (initially, $last = 0$). If the last answer was $-1$, set $last = 1$.

翻译中…
  • If $t = 1$, three integers follow, $l'$, $r'$, and $x'$ ($0 \leq l', r', x' \lt 2^{30}$), meaning that you got an update. First, do the following: $l = l' \oplus last$, $r = r' \oplus last$, $x = x' \oplus last$ and, if $l \gt r$, swap $l$ and $r$.This means you got an update that the bitwise xor of the subarray $[l, r]$ is equal to $x$ (notice that you need to ignore updates that contradict previous updates).
  • If $t = 2$, two integers follow, $l'$ and $r'$ ($0 \leq l', r' \lt 2^{30}$), meaning that you got a query. First, do the following: $l = l' \oplus last$, $r = r' \oplus last$ and, if $l \gt r$, swap $l$ and $r$.For the given query, you need to print the bitwise xor of the subarray $[l, r]$. If it is impossible to know, print $-1$. Don't forget to change the value of $last$.
翻译中…

It is guaranteed there will be at least one query of the second type.

翻译中…

Output

翻译中…

After every query of the second type, output the bitwise xor of the given subarray or $-1$ if it is still impossible to know.

翻译中…

Note

翻译中…

In the first example, the real queries (without being encoded) are:

翻译中…
  • 12
  • 2 1 2
  • 2 0 1073741823
  • 1 1 2 5
  • 2 1 1
  • 2 2 2
  • 2 1 2
  • 1 2 3 6
  • 2 1 1
  • 1 1 3 0
  • 2 1 1
  • 2 2 2
  • 2 3 3
翻译中…
  • The answers for the first two queries are $-1$ because we don't have any such information on the array initially.
  • The first update tells us $a_1 \oplus a_2 = 5$. Note that we still can't be certain about the values $a_1$ or $a_2$ independently (for example, it could be that $a_1 = 1, a_2 = 4$, and also $a_1 = 3, a_2 = 6$).
  • After we receive all three updates, we have enough information to deduce $a_1, a_2, a_3$ independently.
翻译中…

In the second example, notice that after the first two updates we already know that $a_5 \oplus a_6 = 12$, so the third update is contradicting, and we ignore it.

翻译中…

样例

Input #1
12
2 1 2
2 1 1073741822
1 0 3 4
2 0 0
2 3 3
2 0 3
1 6 7 3
2 4 4
1 0 2 1
2 0 0
2 4 4
2 0 0
Output #1
-1
-1
-1
-1
5
-1
6
3
5
InputCopy OutputCopy
Input #2
4
1 5 5 9
1 6 6 5
1 6 5 10
2 6 5
Output #2
12
InputCopy OutputCopy
题目信息
题号
1044D
时间限制
2 s
内存限制
256 MB
标签
数据结构
并查集

题面与样例版权归 Codeforces 及出题人所有;中文翻译由 AI 生成(CI 管线),如有出入请以原文为准。