multiset模板题
You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.
题目描述
现有一个多重集合(Multiset)容器,支持以下操作:插入元素、删除元素、查询元素存在性、统计元素出现次数和统计集合大小。你需要实现这个多重集合,并处理可能的边界情况。具体规则如下:
- 插入操作:向多重集合中插入一个元素。
- 删除操作:从多重集合中删除一个指定元素的实例。若元素不存在,则操作无效。
- 查询操作:检查多重集合中是否存在指定元素。
- 统计操作:返回多重集合中指定元素的出现次数。
- 大小操作:返回多重集合中所有元素的总数量(包括重复元素)。
操作完成后,需输出最终多重集合的元素及其出现次数(按元素升序排列)。
输入格式
- 第一行输入一个整数
q
(1 ≤ q ≤ 1000000
),表示操作的总次数。 - 接下来
q
行,每行表示一次操作,格式如下:- 插入操作:
1 x
(插入元素x
)。 - 删除操作:
2 x
(删除一个元素x
的实例)。 - 查询操作:
3 x
(查询元素x
是否存在)。 - 统计操作:
4 x
(统计元素x
的出现次数)。 - 大小操作:
5
(返回多重集合的总元素数量)。
- 插入操作:
输出格式
- 对于每次查询操作(操作3),输出一行:
- 若元素存在,输出
YES
; - 若元素不存在,输出
NO
。
- 若元素存在,输出
- 对于每次统计操作(操作4),输出一行整数,表示元素
x
的出现次数。 - 对于每次大小操作(操作5),输出一行整数,表示多重集合的总元素数量。
- 所有操作完成后,输出多行:
- 每行包含两个整数
x c
,表示元素x
及其出现次数c
,按元素升序排列。 - 若多重集合为空,不输出任何行。
- 每行包含两个整数
样例 1 输入
6
1 10
1 10
1 20
3 10
4 10
2 10
样例 1 输出
YES
2
10 1
20 1
样例说明
- 插入操作:依次插入10、10、20,多重集合变为
{10, 10, 20}
。 - 查询操作:查询10,存在,输出
YES
。 - 统计操作:统计10的出现次数,为2,输出2。
- 删除操作:删除一个10,多重集合变为
{10, 20}
。 - 最终输出:元素10出现1次,元素20出现1次。
测试点约束
- 操作次数
q ≤ 1000000
。 - 元素值
x
的取值范围为int
(-2^31 ~ 2^31-1)。
提示
- 允许重复:多重集合中允许存在重复元素。
- 有序性:输出元素时需按升序排列。
- 高效实现:插入、删除和查询操作的时间复杂度应为O(log n)。
7.25造数据
- Status
- Done
- Rule
- IOI
- Problem
- 13
- Start at
- 2025-7-25 18:00
- End at
- 2025-7-25 21:00
- Duration
- 3 hour(s)
- Host
- Partic.
- 9