注意必须使用 long long 或 __int64
#include <cstdlib>
#include <iostream>
using namespace std;
long long ans;
void Merge( int a[], int tmpArray[], int l_sta, int r_sta, int r_end )
{
int l_end = r_sta-1;
int id = l_sta;
int i,size = r_end-l_sta+1;
while( l_sta <= l_end && r_sta <= r_end )
if( a[l_sta] <= a[r_sta] )
tmpArray[id++] = a[l_sta++];
else {
ans += l_end-l_sta+1;
tmpArray[id++] = a[r_sta++];
}
while( l_sta <= l_end )
tmpArray[id++] = a[l_sta++];
while( r_sta <= r_end )
tmpArray[id++] = a[r_sta++];
for( i = 0; i < size; i++,r_end-- )
a[r_end] = tmpArray[r_end];
}
void Msort( int a[], int tmpArray[], int left, int right )
{
int center;
if( left < right )
{
center = (left+right)/2;
Msort( a, tmpArray, left, center );
Msort( a, tmpArray, center+1, right );
Merge( a, tmpArray, left, center+1, right );
}
}
void MergeSort( int a[], int size )
{
int *tmpArray;
tmpArray = (int*)malloc( size*sizeof(int) );
Msort( a, tmpArray, 0, size-1 );
free( tmpArray );
}
int main()
{
int a[500002];
int n,i;
while( scanf( "%d", &n ) && n )
{
for( i = 0; i < n; i++ )
scanf( "%d", &a[i] );
ans = 0;
MergeSort( a, n );
printf( "%lld\n", ans );
}
return 0;
}