만드는 중입니다

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

흘러넘치는 분수

면접 대비

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

요약
윗 칸에 부은 샴페인은 아래쪽에서 처음으로 용량이 더 큰 칸으로 넘치며, 질의마다 해당 칸에 남은 양을 구합니다.
난이도

보통10점 중 6점

유형
스택, 유니온 파인드, 시뮬레이션
정답자
아직 제출이 없습니다

문제

지난주 Bill은 처음으로 샴페인 분수를 채웠다. 한 잔에서 다른 잔으로 샴페인이 쏟아지는 모습에 즐거워진 그는 다음 World Finals에서 더 큰 샴페인 분수를 만들기로 했다. 그는 이미 용량이 서로 다른 유리 그릇 nn개를 주문했고, 이를 위아래로 쌓아 거대한 유리 분수를 만들 계획이다. 하지만 샴페인을 어떻게 부어야 할지는 아직 정하지 못했다. 한 병으로는 부족하고, 위에서만 부으면 모든 그릇이 채워지지 않을 수도 있다. Bill은 분수를 채우는 여러 방법을 시험해 보고 싶지만, 샴페인을 낭비하는 것은 아까운 일이다.

ii번째 그림은 ii번째 '+' 유형 쿼리를 시각화한 것이다.

당신의 과제는 주어진 분수에 샴페인을 붓는 과정을 시뮬레이션하는 프로그램을 작성하는 것이다. 어떤 레벨의 그릇이 이미 가득 차 있으면, 샴페인은 그 아래 레벨 중 용량이 더 큰 첫 번째 레벨로 넘쳐흐른다. 그 레벨도 가득 차 있으면 샴페인은 더 아래로 흘러 내려가고, 결국 땅에 스며들어 사라진다. Bill은 시뮬레이션 도중 특정 시점에 어떤 레벨에 샴페인이 얼마나 남아 있는지도 알고 싶어 한다.

입력

첫 줄에는 레벨 수 nn과 쿼리 수 qq가 주어진다 (1≤n,q≤3⋅1051\leq n, q \leq 3 \cdot 10^5).

둘째 줄에는 각 레벨의 용량을 리터 단위로 나타낸 서로 다른 정수 nn개 cc가 위에서 아래 순서로 주어진다 (1≤c≤1091\leq c \leq 10^9).

이어지는 qq개의 줄은 각각 쿼리를 나타낸다. 첫 기호 tt는 '+' 또는 '?'이다.

  • tt가 '+'이면, 정수 ℓ\ell과 xx가 주어진다 (1≤ℓ≤n1 \leq \ell \leq n, 1≤x≤1091 \leq x \leq 10^9). Bill은 레벨 ℓ\ell에 xx리터의 샴페인을 붓는다.
  • tt가 '?'이면, 정수 ℓ\ell이 주어진다 (1≤ℓ≤n1 \leq \ell \leq n). Bill은 레벨 ℓ\ell에 현재 들어 있는 샴페인의 양(리터)을 묻는다.

적어도 하나의 '?' 유형 쿼리가 있음이 보장된다.

출력

'?' 유형의 각 쿼리에 대해, 요청된 레벨에 현재 들어 있는 샴페인의 양을 리터 단위로 출력한다.

예제2

  1. 예제 1

    입력
    4 4
    1 2 3 4
    + 1 6
    ? 4
    + 1 6
    ? 4
    
    예상 출력
    0
    4
    
  2. 예제 2

    입력
    4 8
    2 4 3 5
    + 1 4
    ? 2
    + 2 3
    ? 4
    + 3 4
    ? 4
    + 2 10
    ? 4
    
    예상 출력
    2
    1
    2
    5