Solution Set【2024.1.9】

发布时间 2024-01-09 20:48:29作者: User-Unauthorized

A. k 大值

不喜欢 k 大值,所以转化为求第 \(n - k + 1\) 小值。

注意到在 \(\left[0, V\right]\) 中均匀随机生成 \(n\) 个变量,其中第 \(k\) 小值的期望为 \(\frac{k}{n+1}V\),因此我们可以设置一个阈值 \(t\),并且存储位于 \(\left[\frac{k - t}{n + 1}V, \frac{k + t}{n + 1}V\right]\) 的数有哪些,同时记录小于这个区间左边界的数的个数和大于这个区间右边界的数的个数,这样我们就可以计算出应该求的是在这个范围内的第几小的数,然后再在这个范围内使用现行求第 \(k\) 小值的算法即可。

时间复杂度为 \(O(n)\),空间复杂度期望为 \(O(t)\)