#include #include using namespace std; const int MAXN=1e6+5; int a[MAXN]; int n,m,x; void minHeapFix(int k) { int i=k<<1; if(i>m) return; if(i>1;i;i--)//构建m个元素的初始堆 minHeapFix(i); for(int i=m+1;i<=n;i++)//处理m+1..n的数据 { scanf("%d",&x); //这里是小顶堆,堆顶最小,如果x比前m大中最小的数要大,用x替换堆顶,再维护小顶堆 if(x>a[1]) { a[1]=x; minHeapFix(1); } } int k=m; for(int i=1;i