小慕正在开发一个滑雪比赛成绩管理系统,用于记录和排名运动员的表现。滑雪成绩以时间衡量,时间越短表示成绩越好。每名运动员可以有多条成绩记录。系统需要支持以下操作: 功能要求 1. addRecord(int userId, int duration): - 添加一名运动员的滑雪成绩。 - 每名运动员可以多次添加成绩,系统只保留前 3 次最好的成绩。 - `userId` 代表运动员的编号,`duration` 表示本次滑雪用时(单位:秒),数值越小表示成绩越好。 - 系统自动按成绩升序排序,仅保留前 3 次最佳成绩。 2. getTopAthletes(int num): - 获取滑雪成绩最快的 `num` 名运动员的编号数组,按成绩。成绩越好(用时越短)排在前面。 - 如果多名运动员的最好成绩相同,则先获得该最好成绩的运动员排在前面。 - 如果运动员总数不足 `num`,则返回实际存在的运动员数量。 3. queryTop3Record(int userId): - 查询指定运动员 `userId` 的前 3 次最好成绩,按成绩升序返回。 - 如果该运动员的成绩少于 3 次,则返回实际存在的成绩。若没有任何成绩,返回 `[-1]`。
提示:带虚线的词点一下有通俗解释。
输入描述
1. **第一行** 输入一个整数 `Q`,表示接下来有 `Q` 次操作。 2. **接下来的 `Q` 行** 每行包含一种操作,根据操作类型不同,后续输入的参数也不同。 - **操作 `SkiRankingSystem`**: - 该命令用于初始化滑雪排名系统,后续不会有额外输入。 - 输出 `null`,表示系统已成功初始化。 - **操作 `addRecord`**: - 用于添加运动员的滑雪成绩。后续输入包含两个整数: - `userId`:运动员的 ID,表示该运动员的身份。 - `duration`:滑雪成绩,单位为秒。成绩越小,表示成绩越好。 - 输出 `null`,表示操作成功。 - **操作 `getTopAthletes`**: - 用于查询成绩最快的前 `num` 名运动员的 ID,按成绩升序排列。后续输入包含一个整数: - `num`:需要返回的运动员数量。 - 输出一个整数数组,表示 `num` 名最快的运动员的 ID,按成绩升序排列。如果运动员数量不足 `num`,则返回实际的运动员数量。 - **操作 `queryTop3Record`**: - 用于查询某个运动员的前 3 次最好成绩,按成绩升序排列。后续输入包含一个整数: - `userId`:需要查询的运动员的 ID。 - 输出一个整数数组,表示该运动员的前 3 次最好成绩,按成绩升序排列。如果该运动员的成绩少于 3 次,则按实际成绩返回。如果该运动员没有成绩,则返回 `[-1]`。
输出描述
1. **操作 `SkiRankingSystem`**: - 当初始化系统时,不需要返回任何数据,只需输出一个 `null` 表示初始化成功。 **输出**: - `null` 2. **操作 `addRecord`**: - 每次成功添加运动员的成绩时,操作会成功完成,输出 `null` 表示成功添加成绩。 **输出**: - `null` 3. **操作 `getTopAthletes`**: - 查询最好的 `num` 名运动员时,返回一个 **整数数组**,表示排名前 `num` 名的运动员的 **ID**,按成绩升序排列(成绩更低表示更好)。 - 如果运动员数量不足 `num`,则返回实际数量的运动员 ID。 **输出**: - 一行包含若干整数,表示 `num` 名运动员的 ID,按成绩升序排列。 4. **操作 `queryTop3Record`**: - 查询某个运动员的前 3 次最好成绩时,返回一个 **整数数组**,表示该运动员的前 3 次最好成绩,按成绩升序排列(成绩越小表示更好)。 - 如果该运动员的成绩少于 3 次,则返回实际的成绩数量。 - 如果该运动员没有成绩,则返回 `[-1]`。 **输出**: - 一行包含若干整数,表示该运动员的前 3 次最好成绩。如果成绩不足 3 次,则按实际成绩数量返回。
示例
示例 1
输入
11 SkiRankingSystem addRecord 1 30 addRecord 1 25 addRecord 2 20 addRecord 3 30 addRecord 2 15 addRecord 1 35 addRecord 1 15 getTopAthletes 3 queryTop3Record 1 queryTop3Record 2
输出
null null null null null null null null 2 1 3 15 25 30 15 20
说明:1. **`SkiRankingSystem`**:初始化系统时输出 `null`。 2. **`addRecord`**:每次添加成绩时,输出 `null` 表示成绩添加成功。 3. **`getTopAthletes 3`**:查询最好的 3 名运动员的 ID,输出 `2 1 3`。这表示运动员 2(成绩 15 秒)、运动员 1(成绩 15 秒)和运动员 3(成绩 30 秒)是排名前三的运动员。 4. **`queryTop3Record 1`**:查询运动员 1 的前 3 次最好成绩,输出 `15 25 30`。 5. **`queryTop3Record 2`**:查询运动员 2 的前 3 次最好成绩,输出 `15 20`(因为运动员 2 只有 2 次成绩)。
时间限制 1000 ms · 内存限制 128 MB