QOJ.ac

QOJ

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

#8494. 정렬의 마술

Statistics

유명한 프로그래머가 마술사 역할에 도전하고 있다. 그의 대표적인 마술은 다음과 같다.

음이 아닌 정수 $n$개로 이루어진 배열 $a_1,a_2,\ldots,a_n$이 주어지면, 그는 빠르게 마법의 수 $b$를 찾는다. 음이 아닌 정수 $b$를 배열의 각 원소와 비트 단위 배타적 논리합 연산하여 배열이 정렬되면, $b$를 그 배열의 마법의 수라고 한다. 즉,

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

여기서 $\oplus$는 비트 단위 배타적 논리합 연산이다.

마술을 더욱 인상적으로 만들기 위해, 마술사는 주어진 배열의 마법의 수를 보여 준 뒤 다음 동작을 $q$번 수행한다. 관객에게 배열의 원소 하나를 변경하도록 요청하고, 다시 마법의 수를 보여 주려고 한다. 이 프로그래머는 마술 실력을 매우 정교하게 갈고닦아서 매번 관객에게 가능한 마법의 수 중 최솟값을 보여 준다. 변경된 배열의 마법의 수를 찾을 수 없어 마술이 실패하는 경우도 있다.

주어진 초기 배열과 각 원소 변경 후의 배열에 대해 마법의 수의 최솟값을 계산하거나, 그러한 수가 없음을 판정하는 프로그램을 작성해야 한다.

참고

배타적 논리합은 $\oplus$로 나타내는 논리 연산이며, 다음 진리표로 정의된다.

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

음이 아닌 두 정수 $x$와 $y$의 비트 단위 배타적 논리합을 정의하자. 각 정수 $x$와 $y$를 이진법으로 표현하고, 필요한 경우 더 짧은 쪽의 앞에 $0$을 붙여 길이를 같게 한다. 두 정수 $x$와 $y$의 비트 단위 배타적 논리합도 $x\oplus y$로 나타내며, 그 이진 표현의 각 자리 숫자가 $x$와 $y$의 대응하는 자리 숫자들의 배타적 논리합인 음이 아닌 정수이다. 예를 들어, $5\oplus22=101_2\oplus10110_2=10011_2=19$이다.

올림피아드에서 제공되는 프로그래밍 언어 중 Pascal에서는 배타적 논리합을 나타내는 연산자로 xor를 사용하고, 다른 프로그래밍 언어에서는 ^를 사용한다.

입력

첫 번째 줄에는 배열의 수의 개수를 나타내는 정수 $n$이 주어진다 ($1\le n\le10^6$).

두 번째 줄에는 배열의 원소인 정수 $n$개 $a_1,a_2,\ldots,a_n$이 주어진다 ($0\le a_i<2^{30}$).

세 번째 줄에는 배열 원소를 변경하는 횟수인 정수 $q$가 주어진다 ($0\le q\le10^6$).

다음 $q$개의 줄에는 각각 정수 $p_i$와 $v_i$가 주어진다. $p_i$는 바꿀 배열 원소의 번호 ($1\le p_i\le n$)이고, $v_i$는 그 원소의 새로운 값 ($0\le v_i<2^{30}$)이다.

출력

정수 $q+1$개 $b_0,b_1,\ldots,b_q$를 한 줄에 하나씩 출력해야 한다.

$b_0$는 초기 배열의 가능한 마법의 수 중 최솟값이며, 그러한 수가 존재하지 않으면 $-1$이다.

$1$부터 $q$까지의 $i$에 대해, $b_i$는 처음 $i$번 변경한 후의 배열의 가능한 마법의 수 중 최솟값이며, 그러한 수가 존재하지 않으면 $-1$이다.

예제

입력 1

3
0 1 4
3
2 7
3 3
1 4

출력 1

0
2
-1
4

서브태스크

서브태스크 점수 제한: $n$ 제한: $q$ 제한: $a_i,v_i$ 필요한 서브태스크 대회 중 제공되는 결과
$1$ $30$ $1\le n\le500$ $0\le q\le500$ $0\le a_i,v_i<2^9$ 테스트별 결과
$2$ $29$ $1\le n\le1000$ $0\le q\le1000$ $0\le a_i,v_i<2^{30}$ $1$ 테스트별 결과
$3$ $21$ $1\le n\le10^5$ $0\le q\le10^5$ $0\le a_i,v_i<2^{30}$ $1,2$ 점수
$4$ $20$ $1\le n\le10^6$ $0\le q\le10^6$ $0\le a_i,v_i<2^{30}$ $1$–$3$ 점수

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.