Type: Default 1000ms 256MiB

map模板题

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.

题目描述

现有一个映射(Map)容器,支持以下操作:插入键值对、删除键值对、查询键对应的值、修改键对应的值和统计映射大小。你需要实现这个映射,并处理可能的边界情况。具体规则如下:

  1. 插入操作:向映射中插入一个键值对。若键已存在,则修改对应的值。
  2. 删除操作:从映射中删除指定键的键值对。若键不存在,则操作无效。
  3. 查询操作:获取指定键对应的值。若键不存在,则返回特殊值。
  4. 修改操作:修改指定键对应的值。若键不存在,则操作无效。
  5. 统计操作:返回映射中键值对的数量。

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

输入格式

  • 第一行输入一个整数q1 ≤ q ≤ 1000000),表示操作的总次数。
  • 接下来q行,每行表示一次操作,格式如下:
    • 插入操作1 key value(插入键为key,值为value的键值对)。
    • 删除操作2 key(删除键为key的键值对)。
    • 查询操作3 key(查询键为key对应的值)。
    • 修改操作4 key new_value(将键为key的值修改为new_value)。
    • 统计操作5(返回映射中键值对的数量)。

输出格式

  • 对于每次查询操作(操作3),输出一行:
    • 若键存在,输出对应的值;
    • 若键不存在,输出-1
  • 对于每次统计操作(操作5),输出一行整数,表示映射中键值对的数量。
  • 所有操作完成后,输出多行:
    • 每行包含两个整数key value,表示键值对,按键升序排列。
    • 若映射为空,不输出任何行。

样例 1 输入

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

样例 1 输出

20
30
2
1 30
2 20

样例说明

  1. 插入操作:插入键值对(1, 10)(2, 20),映射变为{1: 10, 2: 20}
  2. 查询操作:查询键2,值为20,输出20。
  3. 修改操作:将键1的值修改为30,映射变为{1: 30, 2: 20}
  4. 查询操作:查询键1,值为30,输出30。
  5. 最终输出:映射中有两个键值对,按键升序排列输出。

测试点约束

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

提示

  • 唯一性:映射中每个键唯一对应一个值。
  • 有序性:输出键值对时需按键升序排列。
  • 高效实现:插入、删除和查询操作的时间复杂度应为O(log n)。

7.25造数据

Not Attended
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