求助:第二个测试点WA,其他AC
查看原帖
求助:第二个测试点WA,其他AC
138004
梁博文314楼主2023/11/24 20:13
#include<stdio.h>
using namespace std;
long long a[100010]={};
long long b[100010]={},c[100010]={},d[100010]={};
void fsort(int l,int r)
{
	if(l==r||a[l]==a[r])return;
	int m=(l+r+1)/2;
	b[100010]={};
	c[100010]={};
	d[100010]={};
	int bi=0,ci=0,di=0;
	for(int i=l;i<=r;i++)
	{
		if(a[i]<a[m])
		{
			bi++; 
			b[bi]=a[i];
		}else if(a[i]==a[m])
		{
			ci++;
			c[ci]=a[i]; 
		}else if(a[i]>a[m])
		{
			di++;
			d[di]=a[i];
		}
		
	}
	for(int i=l;i<=l+bi-1;i++)
	{
		a[i]=b[i-l+1];
	}
	for(int i=l+bi;i<=l+bi+ci-1;i++)
	{
		a[i]=c[i-l-bi+1];
	}
	for(int i=l+bi+ci;i<=r;i++)
	{
		a[i]=d[i-l-bi-ci+1];
	}
	if(bi==0&&di==0)return ;
/*	for(int i=l;i<=r;i++)
	{
		printf("%d ",a[i]);
	 } 
	 */
//	 printf("\n");
	fsort(l,l+bi-1);
	fsort(l+ci+bi,r);
}
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%lld",&a[i]);
	}
	fsort(1,n);
	for(int i=1;i<=n;i++)
	{
		printf("%lld ",a[i]);
	}
	return 0;
}
2023/11/24 20:13
加载中...