都是后两个点TLE
1.Sort
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,k,a[50000005];
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
cout<<a[k+1];
return 0;
}
2.归并
#include<bits/stdc++.h>
using namespace std;
int n,k,a[5000005],tmp[5000005],ans=0;
void mergesort(int lt,int rt)
{
if(lt==rt)
return ;
long long mid=(lt+rt)/2;
mergesort(lt,mid);
mergesort(mid+1,rt);
long long i=lt,j=mid+1,p=lt;
while(i<=mid&&j<=rt)
{
if(a[i]<=a[j])
tmp[p++]=a[i++];
else{
tmp[p++]=a[j++];
ans+=mid-i+1;
}
}
while(i<=mid)
tmp[p++]=a[i++];
while(j<=rt)
tmp[p++]=a[j++];
for(int k=lt;k<=rt;k++)
a[k]=tmp[k];
return ;
}
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
mergesort(1,n);
cout<<a[k+1];
return 0;
}