QOJ.ac

QOJ

Time Limit: 2 s Memory Limit: 512 MB Total points: 100

#8494. Die Illusion des Sortierens

Statistics

Ein bekannter Programmierer versucht sich als Illusionist. Sein berühmtester Trick funktioniert wie folgt.

Für ein gegebenes Array aus $n$ nichtnegativen ganzen Zahlen $a_1, a_2, \ldots, a_n$ findet er schnell eine magische Zahl $b$. Eine nichtnegative ganze Zahl $b$ heißt magisch für das Array, wenn die bitweise Exklusiv-ODER-Verknüpfung jedes Arrayelements mit dieser Zahl das Array in ein sortiertes Array verwandelt. Mit anderen Worten gilt

$$(a_1 \oplus b) \le (a_2 \oplus b) \le \ldots \le (a_n \oplus b),$$

wobei $\oplus$ die bitweise Exklusiv-ODER-Verknüpfung bezeichnet.

Um den Trick eindrucksvoller zu machen, führt der Illusionist nach dem Vorzeigen der magischen Zahl für das gegebene Array $q$-mal folgende Aktion aus. Er fordert die Zuschauer auf, eines der Arrayelemente zu ändern, und versucht danach erneut, eine magische Zahl vorzuzeigen. Dabei hat der Programmierer seine Fähigkeiten als Illusionist so weit perfektioniert, dass er den Zuschauern jedes Mal die kleinstmögliche magische Zahl zeigt. Manchmal misslingt der Trick, weil für das entstandene Array keine magische Zahl gefunden werden kann.

Schreiben Sie ein Programm, das für das anfänglich gegebene Array sowie nach jeder Änderung eines Elements die kleinste magische Zahl für das entstandene Array berechnet oder feststellt, dass es keine solche Zahl gibt.

Hinweis

Exklusiv-ODER ist eine logische Operation, die mit dem Zeichen $\oplus$ bezeichnet wird und durch die folgende Wahrheitstabelle definiert ist:

$x$ $y$ $x \oplus y$
$0$ $0$ $0$
$0$ $1$ $1$
$1$ $0$ $1$
$1$ $1$ $0$

Definieren wir das bitweise Exklusiv-ODER für zwei nichtnegative ganze Zahlen $x$ und $y$. Wir schreiben jede der ganzen Zahlen $x$ und $y$ im Binärsystem und ergänzen gegebenenfalls die kürzere Darstellung mit führenden Nullen, bis beide gleich lang sind. Das bitweise Exklusiv-ODER zweier ganzer Zahlen $x$ und $y$, ebenfalls mit $x \oplus y$ bezeichnet, ist eine nichtnegative ganze Zahl, deren jede Binärziffer das Exklusiv-ODER der entsprechenden Ziffern der Zahlen $x$ und $y$ ist. Beispielsweise ist $5 \oplus 22 = 101_2 \oplus 10110_2 = 10011_2 = 19$.

Unter den bei der Olympiade angebotenen Programmiersprachen wird in Pascal der Operator xor für Exklusiv-ODER verwendet, in den übrigen Programmiersprachen der Operator ^.

Eingabe

Die erste Eingabezeile enthält eine ganze Zahl $n$, die Anzahl der Zahlen im Array ($1 \le n \le 10^6$).

Die zweite Zeile enthält $n$ ganze Zahlen $a_1, a_2, \ldots, a_n$, die Elemente des Arrays ($0 \le a_i < 2^{30}$).

Die dritte Zeile enthält eine ganze Zahl $q$, die Anzahl der Änderungen eines Arrayelements ($0 \le q \le 10^6$).

Die folgenden $q$ Zeilen enthalten jeweils zwei ganze Zahlen $p_i$ und $v_i$. Dabei ist $p_i$ der Index des zu ersetzenden Arrayelements ($1 \le p_i \le n$), und $v_i$ ist der neue Wert dieses Elements ($0 \le v_i < 2^{30}$).

Ausgabe

Die Ausgabe muss $(q + 1)$ ganze Zahlen $b_0, b_1, \ldots, b_q$ enthalten, jeweils eine pro Zeile.

Der Wert $b_0$ ist entweder die kleinstmögliche magische Zahl für das ursprüngliche Array oder $-1$, wenn es keine solche Zahl gibt.

Für $i$ von $1$ bis $q$ ist der Wert $b_i$ entweder die kleinstmögliche magische Zahl für das Array nach den ersten $i$ Änderungen oder $-1$, wenn es keine solche Zahl gibt.

Beispiele

Eingabe 1

3
0 1 4
3
2 7
3 3
1 4

Ausgabe 1

0
2
-1
4

Teilaufgaben

Teilaufgabe Punkte Beschränkungen für $n$ Beschränkungen für $q$ Beschränkungen für $a_i, v_i$ Erforderliche Teilaufgaben Ergebnisse während des Wettbewerbs
1 30 $1 \le n \le 500$ $0 \le q \le 500$ $0 \le a_i, v_i < 2^9$ Ergebnisse je Test
2 29 $1 \le n \le 1000$ $0 \le q \le 1000$ $0 \le a_i, v_i < 2^{30}$ 1 Ergebnisse je Test
3 21 $1 \le n \le 10^5$ $0 \le q \le 10^5$ $0 \le a_i, v_i < 2^{30}$ 1, 2 Punkte
4 20 $1 \le n \le 10^6$ $0 \le q \le 10^6$ $0 \le a_i, v_i < 2^{30}$ 1–3 Punkte

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.