递归排序模板

统计数字 题面

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<string>
using namespace std;
int n; 
int a[200005];
int b[200005];
void comb(int l,int mid,int r)
{
	int p=l,q=mid+1,k=l;
	while(p<=mid&&q<=r)
	{
		if(a[p]<=a[q])
		{
			b[k++]=a[p++];
		}
		else 
		{
			b[k++]=a[q++];
		}
	}
	while(p<=mid) b[k++]=a[p++];
	while(q<=r) b[k++]=a[q++];
	for(int i=l;i<=r;i++)
	{
		a[i]=b[i];
	}
}
void q_sort(int l,int r)
{
	if(l==r) return ;//!!!!!! 
	int mid=(l+r)/2;
	q_sort(l,mid);
	q_sort(mid+1,r);
	comb(l,mid,r);
}
int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
	{
		int x;
		cin>>x;
		a[i]=x;
	} 
	
	q_sort(0,n-1);
	int t=a[0];
	int cnt=1;
	for(int i=1;i<n;i++)
	{
		
		if(a[i]==t)
		{
			cnt++;
		}
		else 
		{
			printf("%d %d\n",t,cnt);
			cnt=1;
			t=a[i];
		}
	}
	printf("%d %d\n",t,cnt);
}
发布了44 篇原创文章 · 获赞 6 · 访问量 1190

猜你喜欢

转载自blog.csdn.net/qq_43868883/article/details/102365757