만드는 중입니다

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

와트

면접 대비

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

요약
배열에서 구간의 모든 값을 같은 수로 바꾸는 연산과, 구간 안에서 합이 짝수인 연속 부분배열의 개수를 구하는 질의를 처리합니다.
난이도

보통10점 중 6점

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

문제

와트가 방에 뛰어들었다. 그는 그 장치를 이미 가지고 있었다. 마침내 그 뒤의 수학을 풀어서 이제 모두에게 보여줄 수 있게 되었다. 그는 처음부터 옳았다.

  • 증기 기관! - 와트가 외쳤다.

모두가 믿기지 않는다는 듯 그를 쳐다보았다.

  • 그 '증기 기관'은 대체 뭘 하는 건데, 와트? - 마린이 의심스럽게 물었다.
  • NN개의 수로 이루어진 배열을 주고, 그 위에서 연산을 한다. 한 종류의 연산은 구간의 모든 원소를 어떤 값으로 바꾸는 것이다. 다른 종류는 구간을 주면, 그 안에서 합이 짝수인 연속 부분 수열이 몇 개인지 알려주는 것이다. 증기 기관!

마린이 손으로 눈을 가렸다.

  • 좋아, 그럼 한번 해 보자.

입력

첫 줄에 자연수 NN과 QQ(1≤N,Q≤200 0001 \le N, Q \le 200\,000)가 주어진다. NN은 증기 기관에 주어지는 배열의 길이이고, QQ는 실행할 연산의 수이다.

다음 줄에는 증기 기관에 주어진 길이 NN의 초기 배열 aia_i(1≤ai≤1 000 0001 \le a_i \le 1\,000\,000)가 주어진다.

다음 QQ개의 줄에는 실행된 연산이 순서대로 주어진다. 각 줄은 다음 두 형태 중 하나이다.

  • 11 LL RR vv: LL번째부터 RR번째 원소(1≤L≤R≤N1 \le L \le R \le N)까지 모든 원소를 값 vv(1≤v≤1 000 0001 \le v \le 1\,000\,000)로 바꾼다.
  • 22 LL RR: LL번째부터 RR번째 원소(1≤L≤R≤N1 \le L \le R \le N)까지의 구간에서 합이 짝수인 연속 부분 수열이 몇 개인지 증기 기관에 묻는다.

두 번째 형태의 연산이 적어도 하나 있다.

출력

두 번째 형태의 각 연산에 대해, 증기 기관의 답을 한 줄에 하나씩 출력한다.

힌트

구간 [2,4][2,4]에는 서로 다른 연속 부분 수열이 6개 있고, 그중 합이 짝수인 것은 2개이다. 그것은 [2,3][2,3]과 [3,4][3,4]이다. 네 번째 원소가 5, 즉 홀수이므로 두 번째 답은 0이다. 질문이 같았으므로 세 번째 답은 첫 번째 답과 같다.

예제3

  1. 예제 1

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

    입력
    8 4
    8 2 4 8 2 10 2 5
    1 5 5 8
    2 4 5
    2 3 7
    2 1 6
    
    예상 출력
    3
    15
    21
    
  3. 예제 3

    입력
    8 4
    4 9 3 8 10 1 9 10
    1 1 4 3
    1 2 6 7
    2 1 8
    2 3 5
    
    예상 출력
    16
    2