在一个繁忙的外卖配送站中,有 M 个充电宝(编号从 1 到 M )可供骑手更换。现在有 N 位骑手(按输入顺序编号从 1 到 N )陆续到达充电站,需要更换电量耗尽的电池。 换电规则如下: - 当一位骑手到达时,他会立即归还正在使用的电池(此时该电池对应的充电宝可供下一位骑手使用)。 - 然后,他会从当前所有可用的充电宝中,选择编号最小的一个来使用。 - 充电宝一旦被占用,会持续充电一段时间,直到被下一位归还此充电宝的骑手释放。 所有骑手的到达时间都是唯一的。您的任务是,找出按输入顺序编号为 K 的那位骑手,最终使用了哪个编号的充电宝。
第一行包含三个用空格分隔的整数: M , N , K 。 - M :充电宝的总数。 - N :需要更换电池的骑手总数。 - K :需要查询其使用充电宝编号的骑手编号。 - 约束条件: 1 ≤ K ≤ N ≤ M ≤ 10^4 。 接下来的 N 行,每行代表一位骑手的信息(按编号 1 到 N 的顺序给出)。每行包含两个整数: - s_i :第 i 位骑手的到达时间。 - t_i :第 i 位骑手归还的电池所需的充电时间。 - 约束条件: 1 ≤ s_i, t_i ≤ 10^5 。
输出一个整数,代表编号为 K 的骑手所使用的充电宝的编号。
12 8 4 50 1 14 32 15 2 22 88 42 14 25 14 9 40 35 50
3
考点:堆
数据规模 N ≤ 1e4 | 限制 3 秒 / 256MB | 标准输入输出
推荐方向:堆
本题切入点
用最小堆维护「当前可用充电宝编号」,同时按归还时间弹出释放;骑手按到达时间排序后依次取堆顶编号,O(N log M)。
用堆在 O(log n) 内取极值,求 TopK 与动态中位数。
思路框架(堆 通法 · 非本题专属)
实现要点:Python 的 heapq 是小根堆,要大根堆就存负数。
复杂度:时间 O(n log k) / O(n log n) | 空间 O(k)
该范式的通法易错点
对照本题
样例 1
12 8 4 / 50 1 / 14 32 / 15 2 / 22 88 / 42 14 / 25 14 / 9 40 / 35 503解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2025年秋招-华为-10月10号留学生开发岗。