Description
In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sorted in ascending order. For the input sequence Ultra-QuickSort produces the output
Your task is to determine how many swap operations Ultra-QuickSort needs to perform in order to sort a given input sequence.
Input
Output
Sample Input
5 9 1 0 5 4 3 1 2 3 0
Sample Output
6 0题意:给定一个数组,每次可以交换相邻两个数组的值,求最少交换次数使数组变为递增数组。
AC代码:
#include <iostream>
using namespace std;
const int maxn = 500006;
int n,a[maxn],b[maxn];
long long sum;
void merge(int l,int mid,int r)
{
int i = l;
int j = mid+1;
for(int k=l;k<=r;k++)
{
if(j>r||i<=mid&&a[i]<a[j])b[k]=a[i++];
else
{
b[k]=a[j++];
sum+=mid-i+1;
}
}
for(int k=l;k<=r;k++)a[k]=b[k];
}
void update_merge(int start,int end)
{
if(start>=end)return ;
int mid = (start+end)/2;
update_merge(start,mid);
update_merge(mid+1,end);
merge(start,mid,end);
}
int main(int argc, char const *argv[])
{
while(cin>>n)
{
if(!n)break;
sum=0;
for(int i=1;i<=n;i++)cin>>a[i];
update_merge(1,n);
cout<<sum<<endl;
}
return 0;
}
359



被折叠的 条评论
为什么被折叠?



