만드는 중입니다

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

사라진 쓰레기

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

요약
배열에 구간 대입과 구간 AND, OR, XOR 연산을 적용하고, 구간의 a_i XOR i 합을 구하는 질의에 답합니다.
난이도

어려움10점 중 8점

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

문제

뒤뜰 대청소가 끝난 뒤 에브스티그라프의 이웃들은 모은 낙엽과 쓰레기를 자루에 담아 밤새 밖에 두었다. 다음 날 아침 쓰레기가 모두 사라졌다. 남은 것은 'УсТнЫй СчЁт 3000'이라고 적힌 이상한 기계뿐이다. 도둑이 남긴 힌트이므로, 이 기계를 먼저 풀어야 도둑에 대한 정보를 얻을 수 있다.

이 기계는 암산 실력을 시험한다. 먼저 배열 a1,…,ana_1, \ldots, a_n이 주어지고, 이후 구간 [l,r][l, r]에 대해 다음 연산 중 하나를 요구한다.

  1. ∑i=lr(ai⊕i)\sum_{i=l}^{r} (a_i \oplus i)를 구한다. 여기서 ⊕\oplus는 두 수의 XOR이다.
  2. 구간 [l,r][l, r]의 모든 원소를 xx로 바꾼다.
  3. 구간 [l,r][l, r]의 모든 원소에 xx와 비트 단위 AND, OR, XOR 중 하나를 적용한다.

입력

첫 줄에 두 정수 nn과 mm이 주어진다. 각각 배열의 원소 개수와 질의 개수이며, 1≤n,m≤1051 \le n, m \le 10^5이다.

둘째 줄에 nn개의 정수 a1,…,ana_1, \ldots, a_n이 주어진다. 0≤ai<2150 \le a_i < 2^{15}이다.

이어서 mm개의 줄에 질의가 한 줄씩 주어진다.

  • 첫 번째 유형: 1 ll rr
  • 두 번째 유형: 2 ll rr xx
  • 세 번째 유형: 3 ll rr xx cc. 여기서 cc는 적용할 연산이며, AND는 &, OR는 |, XOR는 ^ 기호로 나타낸다.

모든 질의에서 1≤l≤r≤n1 \le l \le r \le n이고 0≤x<2150 \le x < 2^{15}이다.

출력

첫 번째 유형의 질의마다 구한 합을 새 줄에 출력한다.

예제1

  1. 예제 1

    입력
    5 6
    3 0 11 21 17
    1 2 5
    2 1 3 9
    1 1 4
    3 3 5 23 ^
    3 2 4 19 &
    1 1 5
    
    예상 출력
    47
    46
    37