社区讨论

60分,前两个tle,求大佬帮助!!

P1923【深基9.例4】求第 k 小的数参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lo2t6p5f
此快照首次捕获于
2023/10/23 19:22
2 年前
此快照最后确认于
2023/10/23 19:22
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
int a[5000001],k,temp,num;
void qs(int i,int j)
{
	int left,right;
	left=i;
	right=j;
	if(i==j&&j==k&&i==k)
	{
		num=a[i];
		return;
	}
	int flag=(i+j)/2;
	num=a[flag];
	while(i!=j)
	{
		while(a[j]>num&&j>i)
		{
			j--;
		}
		while(a[i]<num&&i<j)
		{
			i++;
		}
		temp=a[i];
		a[i]=a[j];
		a[j]=temp;
	}
	if(i==k)
	{
		return;
	}
	else if(i<k)
	{
		qs(i+1,right);
	}
	else if(i>k)
	{
		qs(left,i-1);
	}
	return;
}
int main()
{
	int n;
	scanf("%d%d",&n,&k);
	k=k+1;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	qs(1,n);
	printf("%d",a[k]);
}

回复

0 条回复,欢迎继续交流。

正在加载回复...