第一个点AC,后四个点TLE的归并排序求调
查看原帖
第一个点AC,后四个点TLE的归并排序求调
284521
queen_street楼主2022/10/16 19:29
#include<iostream>
#include<cstring>
using namespace std;

inline int read()
{
	int x=0,f=1;char ch=getchar();
	while(ch<'0' || ch>'9'){if(ch=='-') f=-1;ch=getchar();}
	while(ch>='0' && ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
	return x*f;
}

inline void write(int x)
{
	if(x<0) x=-x,putchar('-');
	if(x>9) write(x/10);
	putchar(x%10+'0');
}

int n,a[100005],b[100005],ans;

void merge(int l,int r)
{
	if(l==r) return;
	int mid=(l+r)>>1;
	merge(l,mid),merge(mid+1,r);
	int s=l,e=mid+1,k=l;
	while(s<=mid && e<=r)
	{
		if(a[s]>a[e]) b[k]=a[s],s++,k++;
		else b[k]=a[e],e++,k++;
	}
	while(s<=mid) b[k]=a[s],s++,k++;
	while(e<=n) b[k]=a[e],e++,k++;
	for(register int i=l;i<=r;i++) a[i]=b[i];
	return;
}

int main()
{
	//freopen("game.in","r",stdin);freopen("game.out","w",stdout);
	int i;
	n=read();
	for(i=1;i<=n;i++) a[i]=read();
	merge(1,n);
	for(i=n;i>=1;i--) write(a[i]),putchar(' ');
	//putchar('\n');
	//write(ans);
	return 0;
}
2022/10/16 19:29
加载中...