本题由于数据范围要采用O(n)的算法,蒟蒻的代码如下:
#include<bits/stdc++.h>
using namespace std;
const int N=5e6+5;
int n,k,a[N];
int x[N],z[N],d[N];
int quick_sort(int l,int r){
int xt=0,zt=0,dt=0;
int flag=a[(r-l>>1)+l];
for(int i=l;i<=r;i++){
if(a[i]<flag)x[++xt]=a[i];
else if(a[i]==flag)z[++zt]=a[i];
else d[++dt]=a[i];
}
if(k+1<=l+xt-1){
for(int i=1;i<=xt;i++)a[l+i-1]=x[i];
quick_sort(l,l+xt-1);
}
else if(k+1<=l+xt+zt-1){
for(int i=1;i<=zt;i++)a[l+xt+i-1]=z[i];
return a[l+xt+zt-1];
}
else{
for(int i=1;i<=dt;i++)a[l+xt+zt+i-1]=d[i];
quick_sort(l+xt+zt,r);
}
}
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
printf("%d",quick_sort(1,n));
return 0;
}
然而结果如下
https://www.luogu.com.cn/record/164343018
求助大佬!本蒟蒻实在看不出来了!!