给出一个由 h 个单元组成的哈希表,单元格编号从 0 到 h − 1 。每个元素都有一个相应的哈希值hash(0<=hash<h)
当一个元素被添加到表中时,如果该元素的哈希值对应的单元格没有被占用,那么该元素就会被添加到该单元格中。否则会发生冲突。当一个元素从表中删除时,它所占用的单元格将变为空格。
假设添加元素的哈希值等于 t ,而表中的单元格 t 已被占用。将该元素添加到 (t + m)modh 单元格。如果单元格 (t + m)modh 也已被占用,则尝试将该元素添加到(t + 2⋅m)modh单元格 ,然后是(t + 3⋅m)modh单元格 。题目保证能找到一个空余的单元格
添加元素时对已被占用的单元格的调用称为虚调用。换言之,如果将元素添加到单元格 (t + i⋅m)modh(i ≥ 0) 中,那么正好进行了 i 次虚调用。
要求计算对 hash 表进行的虚调用总数。假定删除不作虚调用。在执行操作前,表是空的。
输入
第一行输入包含三个整数 h 、 m 和 n ( 1 ≤ m < h ),以空格分隔,其中 h 是哈希表的大小, m 是用解决冲突用的数字, n 是操作次数。
接下来的 n行操作,每个操作都用一行来描述。操作说明如下
"+ id hash"向表中添加元素的编号和 hash 值
(0≤id≤109,0≤hash<h)
"- id"删除编号为id的元素
保证 id 的值是唯一的,并且不会删除任何不存在的对象。
1 ≤ h ≤ 2⋅105,
1 ≤ n ≤ 2⋅105
输出
哈希表的虚调用总数。