题目链接:点击打开链接
题目大意:略。
解题思路:快速排序对排序好的或相等的元素进行排序会形成单枝树,很慢,这时用归并排序。
AC 代码
#include
#include
#define mem(a,b) memset(a,b,sizeof a);
using namespace std;
typedef long long ll;
const int maxn=3e6+1000;
int a[maxn],tmp[maxn];
void mergeArr(int first,int mid,int last)
{
int i=first, j=mid+1;
int m=mid, n=last, k=0;
while(i<=m && j<=n)
if(a[i]<=a[j]) tmp[k++]=a[i++];
else tmp[k++]=a[j++];
while(i<=m) tmp[k++]=a[i++];
while(j<=n) tmp[k++]=a[j++];
for(i=0;i>1); // >> 优先级低于 + -
mergeSort(first,mid);
mergeSort(mid+1,last);
mergeArr(first,mid,last);
}
}
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=0;i