AcWing 786. 第k个数
原题链接
简单
作者:
__43
,
2020-09-25 16:21:51
,
所有人可见
,
阅读 327
#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int q[N];
int quick_sort(int q[],int l,int r,int k)
{
if (l == r) return q[l];
int i = l - 1,j = r + 1,x = q[l + (r - l) / 2];
while (i < j)
{
while (q[++i] < x);
while (q[--j] > x);
if (i < j) swap(q[i],q[j]);
}
int lr = j - l + 1;
if (lr >= k) return quick_sort(q,l,j,k);
else return quick_sort(q,j + 1,r,k - lr);
}
int main(void)
{
int n,k;
scanf("%d%d",&n,&k);
for (int i = 0;i < n;++i) scanf("%d",&q[i]);
printf("%d",quick_sort(q,0,n - 1,k));
return 0;
}