如果让你求区间第(k)大,你会怎么做呢?

主席树?确实是个不错的选择(不过像我这种垃圾还是乖乖打暴力吧)

在c++的stl库中,提供了nth_element这样一个函数

它的用法是nth_element(a+l,a+k,a+r)

这样它会使a这个数组中区间((l,r))内的第(k)大的元素处在第(k)个位置上(相对位置)

但是它并不保证其他元素有序!


不过根据网友的实验,貌似在vs上是有序的,不过在dev中是无序的

时间复杂度:(O(n))

#include<iostream>
#include<algorithm>
using namespace std;
int main() {
    static int a[15] = {0, 1, 2, 5, 7, 3, 4, 1};
    nth_element(a + 1, a + 4, a + 8);
    for (int i = 1; i <= 8; i++) printf("%d ", a[i]); printf("n");
    return 0;
}

输出结果

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!