만드는 중입니다

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

합이 일정한 과정

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

요약
배열에 값을 바꾸는 갱신과 구간 질의가 주어질 때, 두 연산을 최대 연쇄로 적용한 뒤 남는 0의 최대 개수를 구합니다.
난이도

어려움10점 중 9점

유형
세그먼트 트리, 누적 합, 시뮬레이션, 그리디
정답자
아직 제출이 없습니다

문제

원소가 모두 음이 아닌 정수인 배열 aa가 있다고 하자. 이 배열에 다음 두 종류의 연산을 적용할 수 있다.

  1. ai←ai−2a_i \gets a_i - 2, ai+1←ai+1+2a_{i+1} \gets a_{i+1} + 2.
  2. ai+1=0a_{i+1} = 0이면 ai←ai−1a_i \gets a_i - 1, ai+2←ai+2+1a_{i+2} \gets a_{i+2} + 1.

연산을 적용한 뒤에도 모든 원소는 0 이상이어야 한다.

연산을 무한히 반복할 수는 없다. 더 이상 유효한 연산이 없는 연산의 연속을 극대라고 부른다.

길이 nn인 배열 bb가 주어진다. 다음 두 종류의 쿼리를 처리하라.

  • "1 pp xx": bp←xb_p \gets x로 대입한다.
  • "2 ll rr": 부분 배열 b[l..r]b[l..r]을 배열 aa로 본다. 극대 연산의 연속을 적용한 뒤 이 배열에 있을 수 있는 0의 최대 개수를 구하라. 이 쿼리에서 배열 bb는 실제로 바뀌지 않는다.

입력

첫째 줄에 배열 bb의 길이 nn (1≤n≤2⋅1051 \le n \le 2 \cdot 10^{5})이 주어진다.

둘째 줄에는 배열 bb의 초기 원소 nn개가 공백으로 구분되어 주어진다 (0≤bi≤1050 \le b_i \le 10^{5}).

셋째 줄에는 쿼리의 개수 qq (1≤q≤2⋅1051 \le q \le 2 \cdot 10^{5})가 주어진다.

이어지는 qq개의 줄에 쿼리가 하나씩 주어진다. 첫 번째 유형의 쿼리에서는 1≤p≤n1 \le p \le n, 0≤x≤1050 \le x \le 10^{5}이다. 두 번째 유형의 쿼리에서는 1≤l≤r≤n1 \le l \le r \le n이다.

출력

두 번째 유형의 각 쿼리에 대해 답을 한 줄에 하나씩, 입력된 순서대로 출력한다.

예제2

  1. 예제 1

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

    입력
    1
    20500
    1
    2 1 1
    
    예상 출력
    0