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

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

또 다른 돌 게임

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

요약
배열에 구간 chmax 갱신이 가해지는 가운데, 부분 배열과 추가 더미 하나로 이루어진 님 게임에서 첫 수로 이길 수 있는 경우의 수를 센다.
난이도

어려움10점 중 8점

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

문제

코토리와 우미는 호노카가 주최하는 돌 게임을 한다. 규칙은 고전적인 돌 게임과 같다. 여러 개의 돌 더미가 있고 두 사람이 번갈아 가며 한 더미에서 양의 개수만큼 돌을 가져간다. 합법적인 수를 둘 수 없는 사람이 진다.

이번에는 상황이 조금 다르다. 주최자인 호노카는 nn개의 후보 더미로 게임을 준비하는데, ii번째 더미에는 처음에 a_ia\_i개의 돌이 있다. 호노카는 다음 두 종류의 연산을 qq번 수행한다.

  1. 세 정수 ll, rr, xx가 주어지면, 모든 l≤i≤rl \le i \le r에 대해 ii번째 후보 더미의 돌 개수를 max⁡(b_i,x)\max(b\_i, x)로 바꾼다. 여기서 b_ib\_i는 ii번째 후보 더미의 현재 돌 개수이다.
  2. 세 정수 ll, rr, xx가 주어지면, (r−l+2)(r-l+2)개의 더미로 이루어진 돌 게임을 시작한다. 1≤i<(r−l+2)1 \le i < (r-l+2)인 ii번째 더미에는 b_l−1+ib\_{l-1+i}개의 돌이 있고, (r−l+2)(r-l+2)번째 더미에는 xx개의 돌이 있다. 이 연산은 답을 구하기 위한 질의일 뿐이며 nn개의 후보 더미 상태에는 영향을 주지 않는다.

코토리가 항상 선공이다. 코토리의 열렬한 팬인 당신은, 두 사람이 최선의 전략을 사용할 때 코토리가 첫 번째 수로 두어 승리를 확정지을 수 있는 방법의 수를 각 돌 게임마다 알고 싶어 한다. 코토리가 서로 다른 더미에서 돌을 가져가거나, 같은 더미에서 서로 다른 개수의 돌을 가져가는 두 경우를 서로 다른 방법으로 본다.

입력

각 테스트 파일에는 테스트 케이스가 하나만 있다.

입력의 첫 번째 줄에는 두 정수 nn과 qq (1≤n,q≤2×1051 \le n, q \le 2 \times 10^5)가 주어지며, 이는 후보 더미의 수와 연산의 수이다.

두 번째 줄에는 nn개의 정수 a_1,a_2,⋯ ,a_na\_1, a\_2, \cdots, a\_n (0≤a_i≤230−10 \le a\_i \le 2^{30}-1)이 주어지며, a_ia\_i는 ii번째 더미의 처음 돌 개수이다.

다음 qq개의 줄 중 ii번째 줄에는 네 정수 op_iop\_i, l_il\_i, r_ir\_i, x_ix\_i (op_i∈{1,2}op\_i \in \{1, 2\}, 1≤l_i≤r_i≤n1 \le l\_i \le r\_i \le n, 0≤x_i≤230−10 \le x\_i \le 2^{30}-1)가 주어지며, ii번째 연산을 나타낸다. op_iop\_i는 연산의 종류이고 나머지는 연산의 매개변수이다. 연산은 수행되는 순서대로 주어진다.

출력

두 번째 종류의 연산마다 답을 나타내는 정수 하나를 한 줄에 출력한다.

힌트

첫 번째 연산에 대해 플레이어들은 각 더미에 11, 22, 11, 11개의 돌이 있는 돌 게임을 한다. 코토리가 이길 수 있는 유일한 수는 돌이 22개인 더미를 11개로 줄이는 것이다.

두 번째 연산 후 후보 더미의 돌 개수는 각각 11, 33, 33, 44, 11로 바뀐다.

네 번째 연산에 대해 플레이어들은 각 더미에 11, 33, 33, 44, 44개의 돌이 있는 돌 게임을 한다. 코토리가 이길 수 있는 수는 돌이 11개인 더미를 00개로 줄이거나, 돌이 33개인 더미 중 아무거나 22개로 줄이는 것이다.

예제1

  1. 예제 1

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