ningmengcha @ 2022-07-18 15:35:46
#include<iostream>
#include<algorithm>
using namespace std;
int a[5000001];
void fenzhi(int l,int r){
if(l>=r){
return;
}
int x=a[(l+r+1)/2];
int i=l-1;
int j=r+1;
while(i<j){
do{
i++;
}while(a[i]<x);
do{
j--;
}while(a[j]>x);
if(i<j){
swap(a[i],a[j]);
}
}
fenzhi(l,i-1);
fenzhi(i,r);
}
int main()
{
int n;
cin>>n;
int m;
cin>>m;
for(int i=0;i<n;i++){
cin>>a[i];
}
fenzhi(0,n-1);
cout<<a[m];
return 0;
}
by JustinXiaoJunyang @ 2022-07-18 15:37:11
要
by PassName @ 2022-07-18 15:41:16
@ningmengcha 把数组开小,就没有 TLE了
by ningmengcha @ 2022-07-18 16:16:32
@单南松 但是会RE..
by PassName @ 2022-07-18 16:18:01
@ningmengcha 对,解决了TLE 的问题。
当然,也可以选择输出-114514已达到同时解决RE和TLE的问题
by 几何微粒子 @ 2022-08-01 18:53:05
把递归的两行代码改成
if(l<j&&k+1<=j) qsort(l,j);
if(i<r&&i<=k+1) qsort(i,r);
由于要求的只是a[k+1],所以只用对k那一边的数进行排序就可以了。
反正题目没说手段可以多不要脸