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

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

Flip

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

요약
0과 1로 이루어진 배열에서 구간 뒤집기 연산을 처리하며, 질의 구간 안의 교대 부분 배열 개수를 센다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 누적 합, 수학, 구현
정답자
아직 제출이 없습니다

문제

각 원소가 0 또는 1인 길이 nn의 배열이 주어진다. 1≤ℓ≤r≤n1 \le \ell \le r \le n인 모든 쌍 (ℓ,r)(\ell, r)에 대해 [a[ℓ],a[ℓ+1],…,a[r]][a[\ell], a[\ell+1], \ldots, a[r]]를 배열 [a[1],a[2],…,a[n]][a[1], a[2], \ldots, a[n]]의 부분배열이라 한다. 배열 [a[1],a[2],…,a[n]][a[1], a[2], \ldots, a[n]]의 부분배열 [a[ℓ],a[ℓ+1],…,a[r]][a[\ell], a[\ell+1], \ldots, a[r]]이 교대 부분배열이라 함은 a[ℓ]≠a[ℓ+1]≠⋯≠a[r]a[\ell] \ne a[\ell+1] \ne \cdots \ne a[r]인 경우를 말한다. 즉, 부분배열의 모든 원소가 부분배열 내의 이웃한 원소와 다른 경우이다. 교대 부분배열의 정의는 부분배열 내부의 원소만 고려하므로, [1,0,1][1, 0, 1]은 [1,1,0,1,1][1, 1, 0, 1, 1]의 교대 부분배열이다.

이 문제에서는 주어진 배열에 두 종류의 연산이 적용된다.

  • 1 ℓ r: 모든 i∈[ℓ,r]i \in [\ell, r]에 대해 a[i]a[i]를 1−a[i]1 - a[i]로 바꾼다.
  • 2 ℓ r: ℓ≤x≤y≤r\ell \le x \le y \le r이고 부분배열 [a[x],a[x+1],…,a[y]][a[x], a[x+1], \ldots, a[y]]가 교대 부분배열인 쌍 (x,y)(x, y)의 개수를 출력한다.

주어진 배열을 유지하는 프로그램을 작성하라. 프로그램은 개수를 효율적으로 출력해야 한다.

입력

첫째 줄에 두 정수 nn과 qq가 주어진다. nn은 주어진 배열의 길이, qq는 연산의 개수이다. 둘째 줄에 주어진 배열 [a[1],a[2],…,a[n]][a[1], a[2], \ldots, a[n]]을 나타내는 nn개의 수 a[1],a[2],…,a[n]a[1], a[2], \ldots, a[n]이 공백으로 구분되어 주어진다. 이어서 qq개의 줄이 주어지며, ii번째 줄에는 3개의 정수 ti,ℓi,rit_i, \ell_i, r_i가 주어진다. ii번째 연산은 ti ℓi rit_i\ \ell_i\ r_i이다.

출력

두 번째 종류의 연산마다 해당 개수를 한 줄에 출력한다.

제한

  • 1≤n≤2000001 \le n \le 200000
  • 1≤q≤2000001 \le q \le 200000
  • 모든 i∈{1,2,…,n}i \in \{1, 2, \ldots, n\}에 대해 a[i]∈{0,1}a[i] \in \{0, 1\}이다.
  • 모든 j∈{1,2,…,q}j \in \{1, 2, \ldots, q\}에 대해 tj∈{1,2}t_j \in \{1, 2\}이다.
  • 모든 j∈{1,2,…,q}j \in \{1, 2, \ldots, q\}에 대해 1≤ℓj≤rj≤q1 \le \ell_j \le r_j \le q이다.

예제2

  1. 예제 1

    입력
    3 1
    1 1 0
    2 1 3
    
    예상 출력
    4
    
  2. 예제 2

    입력
    20 20
    0 0 1 0 1 0 0 1 1 1 0 1 0 0 0 1 1 1 0 0
    1 1 10
    2 2 7
    1 3 15
    2 1 9
    1 4 9
    2 1 13
    1 13 15
    2 10 20
    1 1 5
    2 2 10
    1 15 17
    2 15 18
    1 1 3
    2 4 6
    1 15 19
    2 1 6
    1 15 15
    2 10 17
    1 1 8
    2 15 19
    
    예상 출력
    16
    16
    21
    14
    12
    6
    4
    9
    10
    8