폭우 (Hard)

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

요약
일렬로 놓인 벽 높이가 주어지고, 각 쿼리마다 [l, r] 구간의 높이를 x로 바꾼 뒤 가둘 수 있는 물의 최대량을 구한다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 배열, 분할 정복, 누적 합
정답자
아직 제출이 없습니다

문제

일렬로 놓인 NN개의 칸에 끊임없는 비가 내린다. ii번째 칸에는 초기에 높이 A_iA\_i의 벽이 세워져 있다. 벽 안에 고인 비가 가득 차면 왼쪽 끝과 오른쪽 끝의 공허로 넘쳐서 사라진다. 또한, 빗물은 일렬로 놓인 좌우 방향 이외의 방향으로 이동하지 않는다.

QQ개의 쿼리가 주어진다. 각 쿼리는 l,r,xl, r, x로 이뤄지며, \[l,r]\[l, r] 구간의 칸에 세워진 벽의 높이가 이후로 xx가 된다는 의미이다.

각 쿼리가 끝날 때마다 최대 얼마만큼의 비가 고이게 될 수 있는지 답하라.

입력

첫 번째 줄에 NN, QQ가 차례대로 주어진다. (1≤N≤100,000;1≤Q≤100,0001 \le N \le 100\\,000; 1 \le Q \le 100\\,000)

두 번째 줄에 초기 높이 A_iA\_i가 순서대로 주어진다. (1≤A_i≤1091 \le A\_i \le 10^9)

세 번째 줄부터 QQ개의 줄에 걸쳐 각 줄마다 쿼리를 의미하는 세 정수 l,r,xl, r, x가 공백으로 구분되어 주어진다. (1≤l≤r≤N;1≤x≤1091 \le l \le r \le N; 1 \le x \le 10^9)

입력으로 주어지는 모든 수는 정수이다.

출력

QQ개의 줄에 걸쳐 각 쿼리를 수행했을 때의 답을 출력한다.

예제1

  1. 예제 1

    입력
    12 3
    3 1 4 1 5 9 2 6 5 3 5 10
    4 4 2
    1 2 10
    3 11 9
    
    예상 출력
    28
    49
    9