아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

King Kog의 접견실

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

요약
기사들이 시작 시각과 방문 시간을 정해 예약을 넣거나 취소하고, 매 변경 후 도착 시각 t에 온 사람이 대기할 시간을 구한다. 같은 시각에 오는 기사에게는 양보한다.
난이도

어려움10점 중 8점

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

문제

King Kog는 기사들의 제멋대로인 태도에 화가 났다. 기사들은 사전 통보도 없이 왕의 접견실에 들이닥칠 수 있다! 그래서 왕은 접견실에 대기열을 만들기로 했고, 이제 각 기사는 미리 자신이 올 시각과 방문에 걸리는 시간을 정한다. 기사들은 기록된 시각 순서대로 응대받지만, 각 기사는 자신보다 앞선 모든 기사의 방문이 끝날 때까지 기다려야 한다.

공주 Keabeanie는 아버지를 만나고 싶어 한다. 하지만 기사들의 순서를 방해하고 싶지 않아서 그냥 대기열에 합류한다. 문제는 기사들이 마음을 자주 바꾼다는 것이다. 대기열에 새로 합류할 수도 있고, 자신의 방문을 취소할 수도 있다. 접견실의 기록이 주어질 때, 공주가 특정 시각에 대기열에 들어간다면 아버지를 만나기까지 얼마나 기다려야 하는지 구해 주자.

입력

첫째 줄에 이벤트의 수 q가 주어진다 (1 ≤ q ≤ 3 · 10^5). 이벤트는 join, cancel, query 세 가지 종류가 있다.

  • Join “+ t d” (1 ≤ t, d ≤ 10^6): 새 기사가 대기열에 합류한다. t는 기사가 올 시각, d는 방문에 걸리는 시간이다.
  • Cancel “- i” (1 ≤ i ≤ q): 기사가 방문을 취소한다. i는 전체 이벤트 목록에서 해당 join 이벤트의 번호(1부터 시작)이다.
  • Query “? t” (1 ≤ t ≤ 10^6): Keabeanie가 시각 t에 온다면 얼마나 기다려야 하는지 묻는다.

각 이벤트가 처리된 뒤 대기열에 같은 도착 시각을 가진 기사 두 명이 존재하지 않음이 보장된다. Cancel 이벤트는 아직 취소되지 않은 이전 join을 가리킨다.

Keabeanie는 어떤 기사와 같은 시각에 올 수도 있지만, 매우 예의 바르기 때문에 그 기사가 지나가기를 기다린다.

출력

각 query마다 Keabeanie가 기다려야 하는 시간을 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    19
    ? 3
    + 2 2
    ? 3
    ? 4
    + 5 2
    ? 5
    ? 6
    + 1 2
    ? 2
    ? 3
    ? 4
    ? 5
    ? 6
    ? 7
    ? 9
    - 8
    ? 2
    ? 3
    ? 6
    
    예상 출력
    0
    1
    0
    2
    1
    3
    2
    1
    2
    1
    0
    0
    2
    1
    1