天才美少女 @ 2021-09-07 14:32:38
#include<bits/stdc++.h>
using namespace std;
int a[5000010],n,k;
int search(int low,int high){
int mid,l=low,r=high,tmp;
mid=a[(low+high)/2];
while(l<r){
while(mid>a[l])l++;
while(mid<a[r])r--;
if(l<=r){
tmp=a[l];
a[l]=a[r];
a[r]=tmp;
l++;
r--;
}
}
if(a[k]==mid)return mid;
else if(a[k]<mid)search(low,r);
else search(l,high);
}
int main(void){
cin>>n>>k;
for(int i=0;i<n;i++)scanf("%d",&a[i]);
cout<<search(0,n-1);
return 0;
}
by 天才美少女 @ 2021-09-07 14:33:26
代码如上,自己试了挺多数据都过了,但不知道哪里出问题了导致1,3过不了
by 一Iris一 @ 2021-09-07 15:29:14
你这个二分求第 k 大给我看傻了
by A1443356159 @ 2021-09-07 15:55:48
nth_element