제설 작업

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

요약
구간 제설 작업이 순서대로 주어질 때, 주어진 구간에서 치운 눈의 총량이 T 이상이 되는 가장 작은 작업 번호를 각 질의마다 구한다.
난이도

어려움10점 중 9점

유형
이분 탐색, 세그먼트 트리, 누적 합, 구현
정답자
아직 제출이 없습니다

문제

ZOAC 대회 전날 밤, 폭설로 도로가 하얗게 뒤덮였다. 대회 참가자들이 제시간에 도착할 수 있도록 운영진은 새벽부터 제설 작업에 나섰고, 진행 상황을 수시로 총괄 관리자에게 보고하기로 했다.

도로는 11번부터 NN번까지의 구간으로 나누어져 있고, 각 ii번 구간에는 눈이 S_iS\_i만큼 쌓여 있다.

제설 작업은 총 MM개이며, 작업 번호가 작은 순서대로 진행된다. 작업 t(1≤t≤M)t(1\le t\le M)는 지정된 구간 \[L_t,R_t]\[L\_t,R\_t]에 최대 적재량 C_tC\_t인 제설차 한 대를 투입하는 일이다. 제설차는 항상 구간 번호가 증가하는 방향으로만 이동하며, 한 구간의 눈을 완전히 치우기 전에는 다음 구간으로 넘어가지 않는다. 제설차가 치운 눈의 총량이 C_tC\_t에 도달하거나 \[L_t,R_t]\[L\_t,R\_t]의 제설이 모두 끝나면 그 작업은 종료된다. 단, 시간이 지남에 따라 눈이 녹거나 새로 쌓이지 않는다. 즉, 제설을 통해 눈을 치우는 경우만 고려하면 된다.

총괄 관리자는 다음과 같은 QQ개의 쿼리를 보내고, 운영진은 각 쿼리에 대해 진행 상황을 보고한다.

  • AA BB TT: tt번째 작업까지 수행했을 때(1≤t≤M)(1\le t\le M), 구간 \[A,B]\[A,B]에서 치워진 눈의 총량이 TT 이상이 되는 가장 작은 tt를 보고한다. 그러한 tt가 없으면 -1을 보고한다.

운영진을 도와, 각 쿼리에 대해 보고할 값을 출력하는 프로그램을 작성하라.

입력

첫 번째 줄에 세 정수 NN, MM, QQ가 공백으로 구분되어 주어진다.(1≤N,M,Q≤200,000)(1\le N,M,Q\le 200\\, 000)

두 번째 줄에 NN개의 정수 S_iS\_i가 공백으로 구분되어 주어진다. (1≤S_i≤1012)(1\le S\_i\le 10^{12})

세 번째 줄부터 MM개의 줄에 걸쳐 각 작업의 정보인 세 정수 L_tL\_t, R_tR\_t, C_tC\_t가 공백으로 구분되어 주어진다. (1≤L_t≤R_t≤N;(1\le L\_t\le R\_t\le N; 1≤C_t≤1018)1\le C\_t\le 10^{18})

그 다음 QQ개의 줄에 걸쳐 세 정수 AA, BB, TT가 공백으로 구분되어 한 줄에 하나씩 주어진다. (1≤A≤B≤N;(1\le A\le B\le N; 1≤T≤1018)1\le T\le 10^{18})

출력

각 QQ개의 쿼리에 맞는 답을 한 줄에 하나씩 출력한다.

힌트

작업이 tt번까지 끝났을 때 ii번 구간에 남아 있는 눈의 양을 S_i(t)S\_i^{(t)}로 두면, 구간 \[A,B]\[A,B]에서 치워진 눈의 총량은 \[\sum_{i=A}^{B}\bigl(S_i-S_i^{(t)}\bigr)\] 이다.

예제1

  1. 예제 1

    입력
    5 5 4
    4 3 5 2 4
    1 3 4
    2 5 5
    1 5 3
    4 5 10
    2 4 1
    1 3 4
    4 5 3
    2 3 5
    3 5 12
    
    예상 출력
    1
    4
    2
    -1