思想
#include<iostream>
using namespace std;
const int N=100010;//题目n的最大范围是1e5,为了防止溢出,开1e5+10就行了。
int s[N];
int qu_sort(int L,int R,int k)
{
//答案就在 (L - R)区间内。L=R时,要找的值就是L或者R,返回哪个就一样。
if(L==R)return s[L];
//左右两边递归排序
int x=s[L],i=L-1,j=R+1;
while(i<j)
{
while(s[++i]<x);//s[+i]如果<x,那么i就++
while(s[--j]>x);//s[-j]如果>x那么j就--
if(i<j)swap(s[i],s[j]);
}
int SL=j-L+1;
if(k<=SL) return qu_sort(L,j,k);
return qu_sort(j+1,R,k-SL);
}
int main()
{
int n=0,k=0;
cin>>n>>k;
for(int i=0;i<n;i++)
{
cin>>s[i];
}
cout<<qu_sort(0,n-1,k)<<endl;
return 0;
}