QOJ.ac

QOJ

Time Limit: 5 s Memory Limit: 256 MB Total points: 100 Hackable ✓

#13000. 哈希表

Statistics

在本题中,我们将处理一种采用开放寻址法的哈希表——这是一种基于哈希的“集合”数据结构。哈希表自然与元素的哈希值有关,哈希值是根据元素内容以某种方式计算出的非负整数。

该哈希表数据结构在一个从 0 开始索引的无限数组上运行。数组的每个单元格要么为空,要么包含一个元素。我们只考虑一种指令:添加一个哈希值为 $h$ 的元素。执行此指令时,我们按顺序尝试将当前元素放入单元格 $h, h+1, h+2, \dots$ 中。其中第一个为空的单元格将被该元素填充。

我们将指令的代价定义为在尝试放入元素时跳过的已占用单元格的数量。例如,如果一个哈希值为 5 的元素被直接放入单元格 5,则代价为 0;但如果它最终被放入单元格 10,则说明我们进行了 5 次不成功的尝试,因此代价为 5。

考虑一系列“添加哈希值为 $h_i$ 的元素”的指令。我们感兴趣的是在保持指令按此顺序执行的总代价不变的情况下,改变该序列(插入或省略指令)。在处理每个序列之前,哈希表都会被清空。

初始时指令序列为空。你需要处理两种改变序列的查询:

  • “+ $h$ $p$”:插入指令“添加一个哈希值为 $h$ 的元素”,使其位于序列的第 $p$ 位;
  • “- $q$”:删除第 $q$ 次查询所插入的指令。

在执行每次查询后,你应该输出当前序列按此顺序执行所有指令的总代价。

指令和查询从 1 开始编号。保证所有查询均合法。

输入格式

输入的第一行包含一个整数 $n$ —— 序列的查询次数 ($1 \le n \le 150\,000$)。 接下来的 $n$ 行描述查询。每行格式为“+ $h$ $p$”或“- $q$”,分别描述插入或删除查询。

对于每个插入查询“+ $h$ $p$”,满足 $0 \le h \le 10^5$ 且 $1 \le p \le k+1$,其中 $k$ 是查询前的序列长度。 对于每个删除查询“- $q$”,保证第 $q$ 次查询是一个插入查询,且该指令未被之前的删除查询删除。

输出格式

输出 $n$ 个数字,每个数字占一行:第 $q$ 行应包含第 $q$ 次查询后执行指令序列的总代价。

样例

样例输入 1

5
+ 1 1
+ 1 2
+ 2 3
- 2
- 1

样例输出 1

0
1
2
0
0

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.