만드는 중입니다

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

XOR 놀이

시간 제한3초메모리 제한512 MB

요약
배열의 원소를 바꾸는 갱신이 있을 때, 구간 안에서 x와 XOR한 값이 가장 작거나 큰 원소의 인덱스를 구합니다. 동점이면 가장 작은 인덱스를 출력합니다.
난이도

보통10점 중 6점

유형
세그먼트 트리, 트라이, 비트 연산
정답자
아직 제출이 없습니다

문제

재현이와 준혁이가 요즘 가장 즐겨 하는 놀이는 XOR 놀이다.

XOR 놀이에서는 배열 AA가 주어졌을 때 다음 쿼리를 처리한다.

  • 1 ll rr xx: l≤i≤rl \le i \le r을 만족하는 ii 중에서 xx와 AiA_i를 XOR한 값이 가장 작은 AiA_i를 고르고, 그 ii를 출력한다. 그런 ii가 여러 개라면 가장 작은 ii를 출력한다.
  • 2 ll rr xx: 같은 조건에서 XOR한 값이 가장 큰 AiA_i를 고르고, 그 ii를 출력한다. 그런 ii가 여러 개라면 가장 작은 ii를 출력한다.
  • 3 pp xx: ApA_p를 xx로 바꾼다.

재현이와 준혁이를 위해 XOR 놀이를 진행하는 프로그램을 만들어보자!

입력

첫째 줄에 배열의 크기 NN이 주어진다. (1≤N≤100,000)(1 \le N \le 100,000)

둘째 줄에 배열의 원소 AiA_i가 NN개 주어진다. (0≤Ai≤107)(0 \le A_i \le 10^7)

셋째 줄에 쿼리의 수 QQ가 주어진다. (1≤Q≤50,000)(1 \le Q \le 50,000)

다음 QQ개의 줄에 쿼리가 주어진다. (0≤x≤107(0 \le x \le 10^7, 1≤l≤r≤N1 \le l \le r \le N, 1≤p≤N)1 \le p \le N)

출력

1번과 2번 쿼리마다 답을 입력된 순서대로 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    7
    92 104 100 43 28 108 97
    9
    2 2 6 76
    1 3 4 66
    2 6 7 6
    3 6 16
    2 6 6 101
    1 7 7 69
    3 6 6
    2 1 3 108
    1 5 5 124
    
    예상 출력
    4
    3
    6
    6
    7
    1
    5