60!
查看原帖
60!
364876
信息学carryHarry楼主2021/5/18 20:40

都是后两个点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;
}

2021/5/18 20:40
加载中...