만드는 중입니다

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

쿼리와 쿼리

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

요약
배열과 구간 XOR 갱신 M개가 주어지며, 갱신값의 구간에 v를 XOR하는 질의와 모든 갱신 후 배열의 구간 XOR을 구하는 질의를 처리합니다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 비트 연산, 누적 합, 배열
정답자
아직 제출이 없습니다

문제

크기가 NN인 배열 A1,A2,…,ANA_1, A_2, \ldots, A_N이 주어진다. 이 배열에 다음 업데이트 연산을 MM번 시행할 것이다. 여기서 ⊕\oplus는 비트 XOR 연산이다.

  • ll rr xx: l≤i≤rl \le i \le r인 모든 AiA_i에 Ai=Ai⊕xA_i = A_i \oplus x를 실행한다.

여기에 다음 쿼리를 해결하는 프로그램을 작성하시오.

  • 1 LL RR vv: L≤i≤RL \le i \le R인 모든 ii에 대해 xi=xi⊕vx_i = x_i \oplus v를 실행한다. 여기서 xix_i는 ii번째 업데이트에서의 xx 값이다.
  • 2 ss ee: MM개의 업데이트 연산을 시행한 후의 배열에서 As⊕As+1⊕⋯⊕AeA_s \oplus A_{s+1} \oplus \cdots \oplus A_e의 값을 출력한다.

입력

첫째 줄에 NN, MM, QQ가 공백으로 구분되어 주어진다. (1≤N,M,Q≤1051 \le N, M, Q \le 10^5)

둘째 줄에 A1A_1부터 ANA_N까지 공백으로 구분되어 주어진다. (0≤Ai≤1090 \le A_i \le 10^9)

다음 MM개의 줄에 업데이트 연산을 나타내는 정수 ll, rr, xx가 순서대로 주어진다. (1≤l≤r≤N1 \le l \le r \le N, 0≤x≤1090 \le x \le 10^9)

다음 QQ개의 줄에 쿼리가 주어진다. 각 쿼리는 1 LL RR vv 또는 2 ss ee 중 하나이다. (1≤L≤R≤M1 \le L \le R \le M, 0≤v≤1090 \le v \le 10^9, 1≤s≤e≤N1 \le s \le e \le N)

출력

2번 쿼리가 주어질 때마다 정답을 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    9 8 9
    22 2 20 6 20 3 22 28 7
    6 9 11
    3 6 9
    3 4 14
    4 9 30
    2 4 30
    2 7 22
    4 7 5
    1 7 29
    2 2 9
    2 4 5
    1 5 6 2
    1 1 8 22
    2 2 4
    2 1 3
    2 4 6
    1 4 5 7
    2 1 3
    
    예상 출력
    20
    2
    8
    12
    19
    12