만드는 중입니다

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

해시 테이블

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

요약
삽입과 삭제 명령이 섞여 있을 때 매 질의 뒤의 현재 해시값들을 선형 탐사 해시 테이블에 넣은 총 비용을 구합니다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 분할 정복, 해시맵
정답자
아직 제출이 없습니다

문제

이 문제에서는 해싱을 바탕으로 한 집합(set) 자료구조의 구현인 개방 주소법을 사용하는 해시 테이블을 다룬다. 해시 테이블은 해시 값을 기준으로 동작한다. 해시 값은 원소의 내용으로부터 정해진 방식으로 계산한 음이 아닌 정수이다.

해시 테이블은 0번부터 번호가 붙은 무한한 배열이다. 각 칸은 비어 있거나 원소 하나를 담고 있다. 여기서는 연산 한 가지만 고려한다. 해시 값이 hh인 원소를 추가하는 연산이다. 이 연산은 칸 hh, h+1h + 1, h+2h + 2, …\ldots 순서로 시도하고, 그중 처음으로 만난 빈 칸에 원소를 넣는다.

연산의 비용은 원소를 넣는 과정에서 건너뛴 점유된 칸의 개수이다. 해시 값이 5인 원소가 칸 5에 바로 들어가면 비용은 0이다. 칸 10에 들어갔다면 다섯 번 실패한 것이므로 비용은 5이다.

추가 명령의 순서를 바꾸려고 한다. 명령을 삽입하거나 삭제하고, 바뀔 때마다 이 순서대로 수행한 명령 전체의 총 비용을 구해야 한다. 각 순서를 처리하기 전에 해시 테이블은 비운다.

처음에는 명령 순서가 비어 있다. 다음 두 종류의 쿼리를 처리한다.

  • + hh pp: 해시 값이 hh인 명령을 순서의 pp번째 위치에 오도록 삽입한다.
  • - qq: qq번째 쿼리에서 삽입한 명령을 삭제한다.

명령과 쿼리는 1번부터 번호를 매긴다. 모든 쿼리는 유효하다.

입력

첫 줄에 쿼리의 개수 nn이 주어진다 (1≤n≤150 0001 \leq n \leq 150\,000). 이후 nn개의 줄에는 각 쿼리가 한 줄씩 주어지며, 형식은 다음 두 가지 중 하나이다.

  • + hh pp: 0≤h≤1050 \leq h \leq 10^5이고 1≤p≤k+11 \leq p \leq k + 1이다. 여기서 kk는 쿼리를 실행하기 전 명령 순서의 크기이다.
  • - qq: qq번째 쿼리는 삽입 쿼리이며, 앞선 삭제 쿼리로 지워지지 않았음이 보장된다.

출력

nn개의 수를 한 줄에 하나씩 출력한다. qq번째 줄에는 qq번째 쿼리를 실행한 뒤 명령 순서에 있는 모든 명령의 총 비용을 출력한다.

예제1

  1. 예제 1

    입력
    5
    + 1 1
    + 1 2
    + 2 3
    - 2
    - 1
    
    예상 출력
    0
    1
    2
    0
    0