给定一个长度为n的数组a下标从1开始对于所有i∈[1,n]∩Z,求出区间 [1,i] 中第k小的数。其中k为给定常数。如果区间内的数的数量不足k个,请输出−1。
1. 使用最大堆 为了高效地求出每个前缀区间 [1,i] 的第 k 小的数,我们可以使用最大堆来动态维护前 k 小的元素。
小明在河边捡石头,每个石头都有各自的重量。他会依次捡起 n 个石头,重量记录在序列 a1,a2,…,an 中,所有重量互不相同。
当捡起第 i 个石头后,他想知道目前手中所有石头中,如果按重量从小到大排列,排在第 k 位的重量是多少。如果手中石头数量不足 k 个,则无法回答,此时记为 −1。
你的任务是对每个 i 从 1 到 n,输出该前缀的第 k 轻重量。
数据范围:石头个数 n 不超过 105,k 是一个小于 n 的正整数。每个石头的重量为正整数且互不相同,大小不超过 109。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.