만드는 중입니다

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

바이러스 시뮬레이터

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

요약
바이러스 감염과 백신 접종을 처리하고, 구간 안에서 면역력이 0보다 큰 연속 사람들의 합이 가장 큰 값을 구합니다.
난이도

어려움10점 중 8점

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

문제

2123년 봄, 드디어 '바이러스 시뮬레이터'가 출시되었다.

바이러스 시뮬레이터는 사람들의 면역력과 바이러스의 생명력 등을 설정해 직접 시뮬레이션을 진행하는 프로그램이다. 훗날 바이러스가 창궐할 때를 대비하여 만든 프로그램이다.

이 시뮬레이터에는 초기에 NN명의 사람들이 11번부터 NN번까지 번호 순서대로 배치되어 있고, ii번째 사람의 면역력은 AiA_i이다.

여기서 한 번 이상의 행동을 할 수 있다. 행동의 종류는 바이러스 침투, 백신 접종, 그룹 면역력 측정 총 3가지가 있다. 각 행동은 입력으로 아래와 같이 주어진다.

  • 바이러스 침투: 11 ii xx. 생명력이 xx인 바이러스가 ii번 사람에게 침투한다. 바이러스는 생명력을 11만큼 소모해 감염자의 면역력을 11 감소시킨다. 이때 침투한 바이러스가 죽기 전에 감염자의 면역력이 없거나(즉, 면역력이 00이거나) 없어지면, 바이러스는 현재 감염자의 번호보다 큰 번호를 가진 사람 중 면역력이 가장 높은 사람에게 전이된다. 전이 조건에 맞는 사람이 여럿이면 번호가 가장 작은 사람에게 옮겨 간다. 이 과정은 바이러스의 생명력이 00이 되어 죽거나, 더 이상 전이될 사람이 없을 때까지 반복된다. (1≤i≤N;1≤x≤109)(1 \le i \le N;1 \le x \le 10^{9})
  • 백신 접종: 22 ii xx. ii번 사람에게 효력이 xx인 백신을 접종하면 면역력이 xx만큼 오른다. (1≤i≤N;1≤x≤109)(1 \le i \le N;1 \le x \le 10^{9})
  • 그룹 면역력 측정: 33 ll rr. ll번부터 rr번까지의 사람들이 그룹을 이룬다. 그룹은 인접한 사람끼리 구성한다. 면역력이 없는 사람들은 면역력이 없는 사람끼리, 면역력이 있는 사람들은 면역력이 있는 사람끼리 그룹을 만든다. 이렇게 구성된 그룹 중에서 그룹 구성원 면역력 합의 최댓값을 구한다. (1≤l≤r≤N)(1 \le l \le r \le N)

입력

첫 번째 줄에 사람의 수 NN과 행동의 횟수 QQ를 나타내는 두 정수가 공백을 사이에 두고 주어진다. (1≤N,Q≤200 000)(1 \le N, Q \le 200\,000)

두 번째 줄에 각 사람의 면역력을 나타내는 NN개의 정수 AiA_i가 공백을 사이에 두고 주어진다. (1≤Ai≤109)(1 \le A_i \le 10^{9})

세 번째 줄부터 QQ개의 줄에 걸쳐 행동 목록이 주어진다.

그룹 면역력 측정 행동이 최소 한 번 이상 주어진다.

출력

그룹 면역력 측정 행동이 주어질 때마다 그 결과를 한 줄에 하나씩 출력한다.

예제2

  1. 예제 1

    입력
    10 7
    3 5 2 6 4 7 2 9 3 5
    3 1 6
    1 3 8
    3 1 6
    1 5 18
    3 3 8
    2 6 1
    3 3 8
    
    예상 출력
    27
    17
    6
    6
    
  2. 예제 2

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