Type: Default 1000ms 256MiB

multimap模板题

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.

题目描述

现有一个多重映射(Multimap)容器,支持以下操作:插入键值对、删除键值对、查询键对应的值、统计键的出现次数和遍历指定键的所有值。你需要实现这个多重映射,并处理可能的边界情况。具体规则如下:

  1. 插入操作:向多重映射中插入一个键值对。允许存在相同键的不同值。
  2. 删除操作:删除指定键的所有键值对。若键不存在,则操作无效。
  3. 查询操作:检查是否存在指定键的键值对。
  4. 统计操作:返回指定键的键值对数量。若键不存在,则操作无效。
  5. 遍历操作:输出指定键的所有值(按插入顺序)。若键不存在,则操作无效。

操作完成后,需输出最终多重映射的所有键值对(按键升序、值升序排列)。

输入格式

  • 第一行输入一个整数q1 ≤ q ≤ 1000000),表示操作的总次数。
  • 接下来q行,每行表示一次操作,格式如下:
    • 插入操作1 key value(插入键为key,值为value的键值对)。
    • 删除操作2 key(删除键为key的所有键值对)。
    • 查询操作3 key(查询是否存在键为key的键值对)。
    • 统计操作4 key(统计键为key的键值对数量)。
    • 遍历操作5 key(输出键为key的所有值,按插入顺序)。

输出格式

  • 对于每次查询操作(操作3),输出一行:
    • 若存在,输出YES
    • 若不存在,输出NO
  • 对于每次统计操作(操作4),输出一行整数,表示键为key的键值对数量。
  • 对于每次遍历操作(操作5),输出一行:
    • 若键存在,输出其所有值,按插入顺序,用空格分隔;
    • 若键不存在,输出空行。
  • 所有操作完成后,输出多行:
    • 每行包含两个整数key value,表示键值对,按键升序排列,若键相同则按值升序排列。
    • 若多重映射为空,不输出任何行。

样例 1 输入

6
1 1 10
1 1 20
1 2 30
3 1
4 1
5 1

样例 1 输出

YES
2
10 20
1 10
1 20
2 30

样例说明

  1. 插入操作:依次插入(1, 10)(1, 20)(2, 30),多重映射变为{1: [10, 20], 2: [30]}
  2. 查询操作:查询键1,存在,输出YES
  3. 统计操作:统计键1的键值对数量,为2,输出2。
  4. 遍历操作:遍历键1的所有值,按插入顺序输出10 20
  5. 最终输出:按键升序、值升序排列输出所有键值对。

测试点约束

  • 操作次数 q ≤ 1000000
  • 键和值的取值范围为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