만드는 중입니다

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

자료 구조 맞히기

시간 제한5초메모리 제한256 MB

요약
배열에 값을 추가하고, 구간 합을 구하고, 모든 원소를 x와 XOR하고, 배열을 정렬하는 자료구조를 구현합니다.
난이도

어려움10점 중 8점

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

문제

길이가 nn인 정수 배열 AA가 주어진다. 원소는 1부터 nn까지 연속된 번호로 매겨져 있다. 다음 네 종류의 쿼리를 mm개 처리하라.

  1. 정수 xjx_j를 배열 AA의 끝에 추가한다.
  2. ∑i=ljrjAi\sum_{i=l_j}^{r_j} A_i 값을 출력한다. (lj≤rjl_j \leq r_j)
  3. 각 원소 AiA_i를 Ai⊕xjA_i \oplus x_j로 바꾼다. 여기서 ⊕\oplus는 비트 XOR 연산이다.
  4. 배열 AA를 정렬한다.

이 쿼리들을 처리하는 자료 구조를 구현하라.

입력

첫째 줄에 초기 배열의 크기 nn (1≤n≤2⋅1051 \leq n \leq 2 \cdot 10^{5})이 주어진다. 둘째 줄에는 nn개의 정수 AiA_i (0≤Ai≤1090 \leq A_i \leq 10^{9})가 주어진다. 셋째 줄에는 쿼리의 개수 mm (1≤m≤2⋅1051 \leq m \leq 2 \cdot 10^{5})이 주어진다. 이어지는 mm개 줄에는 1 xjx_j, 2 ljl_j rjr_j, 3 xjx_j, 4 중 하나의 형식으로 쿼리가 한 줄에 하나씩 주어진다.

1번과 3번 쿼리에서 0≤xj≤1090 \leq x_j \leq 10^{9}이다. 2번 쿼리의 ljl_j와 rjr_j는 배열의 범위 안에 있다. 각 테스트 케이스에는 2번 쿼리가 적어도 하나 있다.

출력

2번 쿼리마다 구한 합을 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    5
    3 4 7 3 6
    7
    3 5
    2 2 4
    4
    1 15
    2 3 6
    3 1
    2 1 6
    
    예상 출력
    9
    30
    33