深海中的STL—nth_element
程序员文章站
2022-03-16 23:19:42
如果让你求区间第$k$大,你会怎么做呢? 主席树?确实是个不错的选择(不过像我这种垃圾还是乖乖打暴力吧) 在c++的stl库中,提供了 这样一个函数 它的用法是 这样它会使a这个数组中区间$(l,r)$内的第$k$大的元素处在第$k$个位置上(相对位置) 但是它并不保证其他元素有序! 不过根据网友的 ......
如果让你求区间第\(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}; for(int i=1;i<=8;i++) printf("%d ",a[i]);printf("\n"); nth_element(a,a+4,a+8); for(int i=1;i<=8;i++) printf("%d ",a[i]);printf("\n"); return 0; }
输出结果