만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

Xorcisten

시간 제한2.5초메모리 제한1024 MB

요약
정수 목록의 값이 바뀔 때마다 a_i XOR X가 비감소 순서가 되는 가장 작은 X를 구하고, 그런 X가 없으면 -1을 출력하는 문제입니다.
난이도

보통10점 중 6점

유형
비트 연산, 구현
정답자
아직 제출이 없습니다

문제

Xorcisten Roxanne은 리스트를 아주 빠르게 정렬하는 특별한 능력이 있다. 정수 리스트 a1,a2,…,aNa_1, a_2, \dots, a_N을 보면 그녀는 곧바로 다음 식이 성립하는 정수 XX를 찾는다.

a1⊕X≤a2⊕X≤⋯≤aN⊕Xa_1 \oplus X \leq a_2 \oplus X \leq \dots \leq a_N \oplus X

여기서 ⊕\oplus는 비트 XOR이다. 두 수를 2진법으로 쓰고, 가장 낮은 자리부터 차례로 두 자리가 같으면 0, 다르면 1을 쓴다. 자리올림 없이 2진수 덧셈을 하는 것과 같다.

그녀가 할 일은 각 aia_i를 ai⊕xa_i \oplus x로 바꾸는 것뿐이고, 그러면 리스트가 정렬된다.

여러 회사가 아주 긴 리스트를 정렬해 달라고 Roxanne을 자주 고용한다. 그런데 어느 날 그녀는 자신의 능력이 사라졌다는 것을 알게 된다. 당신의 과제는 그녀가 계속 일할 수 있도록 프로그램을 작성하는 것이다.

비음수 정수 a1,…,aNa_1, \dots, a_N과 QQ개의 변경 pi,vip_i, v_i가 주어진다. 이는 apia_{p_i}가 viv_i로 바뀐다는 뜻이다. cic_i는 처음 ii개의 변경을 적용한 뒤, 리스트 a1⊕X,…,aN⊕Xa_1 \oplus X, \dots, a_N \oplus X가 정렬되도록 하는 가장 작은 비음수 정수 XX이다. c0,c1,…,cQc_0, c_1, \dots, c_Q를 출력한다. 그런 XX가 없으면 −1-1을 출력한다.

입력

첫 줄에 정수 NN (1≤N≤1061 \leq N \leq 10^6)이 주어진다. 리스트에 있는 수의 개수이다.

둘째 줄에는 NN개의 정수 a1,a2,…,aNa_1, a_2, \dots, a_N (0≤ai<2300 \leq a_i < 2^{30})이 주어진다.

셋째 줄에는 변경 횟수 QQ (0≤Q≤1060 \leq Q \leq 10^6)가 주어진다.

이어지는 QQ개의 줄에는 정수 두 개 pip_i (1≤pi≤N1 \leq p_i \leq N)와 viv_i (0≤vi<2300 \leq v_i < 2^{30})가 주어진다. 이는 apia_{p_i}를 viv_i로 바꾼다는 뜻이다.

출력

Q+1Q+1개의 줄을 출력한다. ii번째 줄(0부터 센다)에는 변경 1,2,…,i1, 2, \dots, i를 적용한 뒤 리스트를 정렬하는 가장 작은 xx인 cic_i를 출력한다. 그런 xx가 없으면 −1-1을 출력한다.

제한

  • N,Q≤106N, Q \leq 10^6
  • ai,vi<230a_i, v_i < 2^{30}

예제1

  1. 예제 1

    입력
    3
    0 1 4
    3
    2 7
    3 3
    1 4
    
    예상 출력
    0
    2
    -1
    4