flash sort #5RE 求助
查看原帖
flash sort #5RE 求助
345930
Gold14526神金楼主2022/10/27 13:54
#include<bits/stdc++.h>
using namespace std;
int num;
char ch;
int read()
{
	num=0;
	ch=getchar();
	while(ch<'0'||ch>'9')
	{
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		num=(num<<1)+(num<<3)+ch-'0';
		ch=getchar();
	}
	return num;
}
int f(int x,int n,int mn,int mx)
{
	return (int)(1.0*(n-1)*(x-mn)/(1.0*mx-mn)+1);
}
struct node{
	int num,next;
}c[100001];
int head[100001],a[100001],ans[100001],n;
int main()
{
	n=read();
	int mn=2147483647,mx=-1;
	for(int i=1;i<=n;++i)
	{
		a[i]=read();
		mn=min(mn,a[i]);
		mx=max(mx,a[i]);
	}
	for(int i=1;i<=n;++i)
	{
		c[i]=node{a[i],head[f(a[i],n,mn,mx)]};
		head[f(a[i],n,mn,mx)]=i;
	}
	int m=f(mx,n,mn,mx),t,k=0;
	for(int i=1;i<=m;++i)
	{
		t=0;
		for(int j=head[i];j;j=c[j].next)
		{
			a[++t]=c[j].num;
		}
		sort(a+1,a+t+1);
		for(int j=1;j<=t;++j)
		{
			ans[++k]=a[j];
		}
	}
	for(int i=1;i<=n;++i)
	{
		cout<<ans[i]<<' ';
	}
	return 0;
}
2022/10/27 13:54
加载中...