XOR

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

요약
배열에 구간 XOR 갱신과 한 점 조회가 번갈아 들어올 때, 각 조회 시점의 값을 순서대로 출력한다.
난이도

보통10점 중 6점

유형
이분 탐색, 누적 합, 비트 연산, 정렬
정답자
아직 제출이 없습니다

문제

수열 하나에 다음 두 가지 연산을 처리한다.

  • 구간 [a,b][a, b]에 속한 모든 원소에 cc를 xor한다.
  • aa번째 원소의 값을 출력한다.

초기 수열과 연산 목록이 주어지면 출력 연산의 결과를 순서대로 구하라.

입력

첫째 줄에 수열의 크기 nn이 주어진다. (0<n≤500,0000 < n \le 500{,}000)

둘째 줄에 수열의 원소가 00번부터 n−1n - 1번까지 차례대로 주어진다. 각 원소는 100,000100{,}000보다 크지 않은 음이 아닌 정수이다.

셋째 줄에 쿼리의 개수 mm이 주어진다. (0<m≤500,0000 < m \le 500{,}000)

이어지는 mm개의 줄에 쿼리가 한 줄에 하나씩 주어진다. 각 줄은 쿼리의 종류 tt로 시작한다. tt가 1이면 뒤이어 aa, bb, cc가 주어지고, 구간 [a,b][a, b]의 각 원소에 cc를 xor한다. (0≤a≤b<n0 \le a \le b < n, 0≤c≤100,0000 \le c \le 100{,}000) tt가 2이면 뒤이어 aa가 주어지고, 그 시점의 aa번째 원소의 값을 출력한다. (0≤a<n0 \le a < n)

출력

tt가 2인 쿼리마다 그 시점의 aa번째 원소의 값을 한 줄에 하나씩 출력한다.

예제6

  1. 예제 1

    입력
    5
    1 2 3 4 5
    6
    1 0 4 9
    2 0
    2 1
    2 2
    2 3
    2 4
    
    예상 출력
    8
    11
    10
    13
    12
    
  2. 예제 2

    입력
    1
    0
    5
    2 0
    1 0 0 100000
    2 0
    1 0 0 100000
    2 0
    
    예상 출력
    0
    100000
    0
    
  3. 예제 3

    입력
    4
    7 0 100000 13
    4
    2 0
    2 1
    2 2
    2 3
    
    예상 출력
    7
    0
    100000
    13
    
  4. 예제 4

    입력
    6
    0 0 0 0 0 0
    9
    1 0 5 12
    1 1 3 0
    2 0
    1 2 4 5
    2 2
    2 3
    2 4
    2 5
    2 1
    
    예상 출력
    12
    9
    9
    9
    12
    12
    
  5. 예제 5

    입력
    3
    100000 100000 99999
    7
    1 0 2 100000
    2 0
    2 1
    2 2
    1 1 1 65535
    2 1
    2 2
    
    예상 출력
    0
    0
    63
    65535
    63
    
  6. 예제 6

    입력
    5
    1 2 3 4 5
    8
    1 0 4 7
    1 0 4 7
    2 0
    2 4
    1 0 0 1
    1 4 4 2
    2 0
    2 4
    
    예상 출력
    1
    5
    0
    7