80tps求助
查看原帖
80tps求助
1285198
jianghaochen117楼主2024/10/14 19:39

我用的归并排序,结果超时了

#include <bits/stdc++.h>
using namespace std;
const int N = 5e6 + 10;
int n , mid , a[N] , tmp[N];
void merge(int left , int mid , int right)
{
	int i = left , j = mid + 1 , k = left;
	while(i <= mid && j <= right)
	{
		if(a[i] <= a[j])
		{
			tmp[k] = a[i];
			i++;
			k++;
		}
		else
		{
			tmp[k] = a[j];
			j++;
			k++;
		}
	}
	while(i <= mid)
	{
		tmp[k++] = a[i++];
	}
	while(j <= right)
	{
		tmp[k++] = a[j++];
	}
	for(int i = left;i <= right;i++)
	{
		a[i] = tmp[i];
	}
}
void merge_(int left,int right){
	if (left >= right)
	{
		return;
	}
	int mid = (left + right) >> 1;
	merge_(left , mid);
	merge_(mid + 1 , right);
	merge(left , mid , right);
}
int main()
{
	int n , k;
	scanf("%d%d" , &n , &k);
	for(int i = 1;i <= n;i++)
	{
		scanf("%d" , &a[i]);
	}
	merge_(1 , n);
	printf("%d" , tmp[k + 1]);
	return 0;
}
2024/10/14 19:39
加载中...