아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

xor²

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

요약
배열에서 한 원소에 XOR을 적용하는 갱신과, l <= (i xor x) <= r을 만족하는 모든 A_i의 XOR을 구하는 질의를 처리한다.
난이도

어려움10점 중 8점

유형
비트 연산, 세그먼트 트리, 이분 탐색, 분할 정복
정답자
아직 제출이 없습니다

문제

음이 아닌 정수만으로 이루어진 길이가 NN인 수열 A0A_0, A1A_1, ⋯\cdots, AN−1A_{N-1}이 주어진다. 다음 쿼리를 수행하는 프로그램을 작성하시오.

  • 1 l r x: l≤(i⊕x)≤rl \le (i \oplus x) \le r과 0≤i<N0 \le i < N을 모두 만족하는 모든 정수 ii에 대해, AiA_i의 값들을 전부 bitwise XOR하여 출력한다. 해당하는 ii가 없으면 00을 출력한다.
  • 2 i x: AiA_i를 Ai⊕xA_i \oplus x로 설정한다.

⊕\oplus는 bitwise XOR 연산자이다. 인덱스가 0부터 시작함에 유의하라.

입력

첫 번째 줄에 수열의 길이 NN이 주어진다.

두 번째 줄에 NN개의 정수 A0A_0, A1A_1, ⋯\cdots, AN−1A_{N-1}이 공백으로 구분되어 주어진다.

세 번째 줄에 쿼리의 수 QQ가 주어진다.

다음 QQ개의 줄에 쿼리가 한 줄에 하나씩 주어진다. 각 쿼리는 1 l r x 또는 2 i x 중 한 가지 형식이다.

출력

1번 쿼리가 주어질 때마다 각 줄에 답을 출력한다.

제한

  • 1≤N,Q≤200 0001 \le N, Q \le 200\,000
  • 0≤Ai<2310 \le A_i < 2^{31} (0≤i<N0 \le i < N)
  • 1번 쿼리에서 0≤l≤r<N0 \le l \le r < N이고 0≤x<N0 \le x < N
  • 2번 쿼리에서 0≤i<N0 \le i < N이고 0≤x<2310 \le x < 2^{31}
  • 1번 쿼리는 1개 이상 주어진다.
  • 입력으로 주어지는 모든 수는 정수이다.

힌트

aa와 bb의 bitwise XOR인 a⊕ba \oplus b는 2진법으로 표현했을 때 aa와 bb의 ii번째 자리가 같으면 a⊕ba \oplus b의 ii번째 자리가 00이고, 서로 다르면 11이 되도록 계산한다.

예제1

  1. 예제 1

    입력
    5
    1 3 5 4 5
    5
    1 0 4 0
    1 0 2 1
    2 0 15
    1 4 4 4
    1 0 4 1
    
    예상 출력
    6
    6
    14
    12