#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[1005];
int c[1005];
int n,cnt;
void MergeSort(int l, int r)
{
int mid, i, j, tmp;
if( r > l+1 )
{
mid = (l+r)/2;
MergeSort(l, mid);
MergeSort(mid, r);
tmp = l;
for( i=l, j=mid; i < mid && j < r; )
{
if( a[i] > a[j] )
{
c[tmp++] = a[j++];
cnt += mid-i;
}
else c[tmp++] = a[i++];
}
if( j < r ) for( ; j < r; ++j ) c[tmp++] = a[j];
else for( ; i < mid; ++i ) c[tmp++] = a[i];
for ( i=l; i < r; ++i ) a[i] = c[i];
}
}
int main()
{
int T;
int Case=1;
//freopen("d:\\test.txt","r",stdin);
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=0; i<n; i++)
{
scanf("%d",&a[i]);
}
memset(c,0,sizeof(c));
cnt=0;
MergeSort(0,n);
printf("Scenario #%d:\n%d\n\n",Case++,cnt);
}
return 0;
}
POJ 1904 Brainman(归并求逆序数)
最新推荐文章于 2018-03-24 14:43:22 发布
本文通过C++实现了一个解决POJ 1904问题的程序,该问题涉及计算数组中的逆序对数量。通过归并排序算法,程序有效地计算了每个测试案例中的逆序数,并给出了详细的过程。
摘要由CSDN通过智能技术生成