레몬컵 상품 준비하기

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

요약
상품 개수에 대한 구간 증감 갱신이 주어질 때, 한 구간의 모든 상품을 연속 번호 2개 이상으로 이루어진 선물 묶음으로 나누는 최소 묶음 수를 구하고, 불가능하면 -1을 출력한다.
난이도

어려움10점 중 9점

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

문제

레몬컵 운영진은 대회 상품을 준비하려 한다. 상품의 종류는 총 NN개이며, 각 종류는 11번부터 NN번까지 번호가 매겨져 있다. 처음에는 모든 상품의 개수가 00이다.

재원이는 이 상품들을 이용해 선물 묶음을 만들고자 한다. 하나의 선물 묶음은 연속한 번호의 상품을 2\mathbf{2}개 이상 포함해야 하며, 각 상품은 정확히 1\mathbf{1}개씩 사용한다.

다음과 같은 두 가지 쿼리가 주어진다.

  • 1 l r k: l,l+1,…,rl, l+1, \dots, r번 상품을 각각 kk개씩 구매한다. 단, k<0k < 0이면 해당 상품들을 각각 ∣k∣|k|개씩 폐기하였다는 뜻이다.
  • 2 l r: l,l+1,…,rl, l+1, \dots, r번 상품을 모두 사용하여 만들 수 있는 선물 묶음의 최소 개수를 출력한다. 이때 l,l+1,…,rl, l+1, \dots, r번 상품만을 사용해야 한다. 만약 모든 상품을 사용해서 선물 묶음을 만들 수 없다면 -1을 출력한다.

22번 쿼리가 주어질 때마다 정답을 출력하라.

입력

입력은 다음과 같은 형식으로 주어진다.

N QN \ Q

query_1\text{query}\_1

query_2\text{query}\_2

⋮\vdots

query_Q\text{query}\_Q

각각의 query_i\text{query}\_i (1≤i≤Q1 \le i \le Q)는 다음 두 형식 중 하나이다.

1 l_i r_i k_i1 \ l\_i \ r\_i \ k\_i

2 l_i r_i2 \ l\_i \ r\_i

출력

22번 쿼리가 주어질 때마다 정답을 출력한다.

제한

  • 1≤N≤200 0001 \leq N \leq 200\ 000.
  • 1≤Q≤200 0001 \leq Q \leq 200\ 000.
  • 1≤l_i≤r_i≤N1 \leq l\_i \leq r\_i \leq N (1≤i≤Q1 \le i \le Q).
  • −109≤k_i≤109-10^9 \leq k\_i \leq 10^9 (1≤i≤Q1 \le i \le Q).
  • 어떤 시점에서도 ii번 상품의 개수는 00 미만이 되거나 10910^9를 초과하지 않는다 (1≤i≤N)(1 \leq i \leq N).

예제1

  1. 예제 1

    입력
    5 7
    1 1 4 3
    1 2 3 1
    2 1 4
    1 2 2 7
    2 1 4
    1 2 2 -5
    2 1 3
    
    예상 출력
    4
    -1
    6