Type: Default 1000ms 256MiB

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)容器,支持以下操作:插入元素、删除元素、查询元素存在性、统计元素出现次数和统计集合大小。你需要实现这个多重集合,并处理可能的边界情况。具体规则如下:

  1. 插入操作:向多重集合中插入一个元素。
  2. 删除操作:从多重集合中删除一个指定元素的实例。若元素不存在,则操作无效。
  3. 查询操作:检查多重集合中是否存在指定元素。
  4. 统计操作:返回多重集合中指定元素的出现次数。
  5. 大小操作:返回多重集合中所有元素的总数量(包括重复元素)。

操作完成后,需输出最终多重集合的元素及其出现次数(按元素升序排列)。

输入格式

  • 第一行输入一个整数q1 ≤ 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

样例说明

  1. 插入操作:依次插入10、10、20,多重集合变为{10, 10, 20}
  2. 查询操作:查询10,存在,输出YES
  3. 统计操作:统计10的出现次数,为2,输出2。
  4. 删除操作:删除一个10,多重集合变为{10, 20}
  5. 最终输出:元素10出现1次,元素20出现1次。

测试点约束

  • 操作次数 q ≤ 1000000
  • 元素值x的取值范围为int(-2^31 ~ 2^31-1)。

提示

  • 允许重复:多重集合中允许存在重复元素。
  • 有序性:输出元素时需按升序排列。
  • 高效实现:插入、删除和查询操作的时间复杂度应为O(log n)。

竞赛3班7.26日习题课

Not Attended
Status
Done
Rule
IOI
Problem
13
Start at
2025-7-26 14:00
End at
2025-7-26 20:00
Duration
6 hour(s)
Host
Partic.
9