쇼핑

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

요약
상품 가격 배열과 (금액, l, r) 질의가 주어질 때, l번째부터 r번째 상품을 차례로 보며 각 상품에서 최대한 구매하는 고객이 마지막에 남기는 금액을 구한다.
난이도

어려움10점 중 8점

유형
배열, 세그먼트 트리, 이분 탐색, 그리디
정답자
아직 제출이 없습니다

문제

어느 할인 매장의 진열대에 상품 n개가 한 줄로 놓여 있다. 왼쪽에서 i번째 상품의 개당 가격은 aia_i 달러이고, 상품마다 재고는 무제한이다.

손님 q명이 차례로 매장에 들어온다. i번째 손님은 viv_i 달러를 가지고 lil_i번째 상품에서 출발해 오른쪽으로 한 칸씩 이동하며 rir_i번째 상품까지 살펴본다.

손님은 상품을 하나 볼 때마다 남은 돈으로 살 수 있는 최대 개수만큼 그 상품을 산다. 개당 가격이 남은 돈보다 비싼 상품은 사지 않고 지나간다.

손님마다 다 살펴본 뒤에 남은 돈이 얼마인지 구하라.

입력

첫째 줄에 상품의 개수 n과 손님의 수 q가 공백으로 구분되어 주어진다. (1≤n,q≤2000001 \le n, q \le 200000)

둘째 줄에 상품의 가격 a1,a2,…,ana_1, a_2, \dots, a_n이 공백으로 구분되어 주어진다. (1≤ai≤10181 \le a_i \le 10^{18})

다음 q개의 줄에는 손님 한 명의 정보가 한 줄씩 viv_i, lil_i, rir_i 순서로 공백으로 구분되어 주어진다. (1≤vi≤10181 \le v_i \le 10^{18}, 1≤li≤ri≤n1 \le l_i \le r_i \le n)

출력

q개의 줄에 걸쳐, 각 손님이 다 살펴본 뒤에 남은 돈을 입력에 주어진 순서대로 한 줄에 하나씩 출력한다.

예제2

  1. 예제 1

    입력
    5 3
    5 3 2 4 6
    8 5 5
    107 1 4
    7 3 5
    
    예상 출력
    2
    0
    1
    
  2. 예제 2

    입력
    3 2
    10 20 30
    5 1 3
    9 2 3
    
    예상 출력
    5
    9