#5887. 第K大
第K大
题目描述
你有一个初始为空的整数序列,需要支持以下操作:
- 插入操作:向序列中插入一个整数。
- 查询操作:查询当前序列中第 K 大的数,其中 K 是题目开始时给定的固定值。
注意:
- K 在整个过程中保持不变
- 如果序列中的元素数量少于 K,则查询操作应返回当前序列中的最大数
- 查询后不会从序列中移除任何元素
输入格式
第一行包含两个整数 Q 和 K (1 ≤ Q ≤ 2×10⁵, 1 ≤ K ≤ 10⁵),表示操作次数和固定的 K 值。
接下来 Q 行,每行描述一个操作:
1 x:表示插入整数 x (-10⁹ ≤ x ≤ 10⁹) 到序列中。2:表示查询当前序列中第 K 大的数。
保证:
- 至少有一次查询操作
- 所有操作合法
- 查询操作时序列中一定有数字
输出格式
对于每个查询操作,输出一行,包含查询的结果。
如果序列中的元素数量少于 K,则输出当前序列中的最大数。
样例输入 #1
10 3
1 5
1 3
1 8
2
1 2
1 7
2
1 10
1 1
2
样例输出 #1
3
5
7
样例解释 #1
操作过程:
- 插入 5 → 序列:[5],元素数 < K,最大数为 5
- 插入 3 → 序列:[3, 5],元素数 < K,最大数为 5
- 插入 8 → 序列:[3, 5, 8],第3大是 3(排序后:[3, 5, 8])
- 查询 → 输出 3
- 插入 2 → 序列:[2, 3, 5, 8]
- 插入 7 → 序列:[2, 3, 5, 7, 8],第3大是 5
- 查询 → 输出 5
- 插入 10 → 序列:[1, 2, 3, 5, 7, 8, 10],第3大是 7
- 插入 1 → 序列:[1, 2, 3, 5, 7, 8, 10],第3大是 7
- 查询 → 输出 7
样例输入 #2
6 4
1 10
1 20
2
1 30
1 40
2
样例输出 #2
20
10
样例解释 #2
第一个查询时,序列为 [10, 20],元素数量少于 K=4,所以输出最大数 20。
第二个查询时,序列为 [10, 20, 30, 40],第4大是 10。
数据范围
数据规模分层
- 对于 20% 的数据:1 ≤ Q ≤ 1000,1 ≤ K ≤ 100
- 对于 40% 的数据:1 ≤ Q ≤ 5×10⁴,1 ≤ K ≤ 10⁴
- 对于 70% 的数据:1 ≤ Q ≤ 10⁵,1 ≤ K ≤ 5×10⁴
- 对于 100% 的数据:1 ≤ Q ≤ 2×10⁵,1 ≤ K ≤ 10⁵,-10⁹ ≤ x ≤ 10⁹