1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4 #define N 500000
5
6 int a[N],b[N];
7 long long count;
8 void mergearray(int a[], int first, int mid, int last, int temp[])
9 {
10 int i = first, j = mid + 1;
11 int m = mid, n = last;
12 int k = 0;
13
14 while (i <= m && j <= n)
15 {
16 if (a[i] < a[j])
17 temp[k++] = a[i++];
18 else
19 {
20 temp[k++] = a[j++];
21 count += (m-i+1);//记录交换的次数
22 }
23 }
24
25 while (i <= m)
26 temp[k++] = a[i++];
27 while (j <= n)
28 temp[k++] = a[j++];
29 for (i = 0; i < k; i++)
30 a[first + i] = temp[i];
31 }
32
33 void mergesort(int a[], int first, int last, int temp[])
34 {
35 if (first < last)
36 {
37 int mid = (first + last) / 2;
38 mergesort(a, first, mid, temp);
39 mergesort(a, mid + 1, last, temp);
40 mergearray(a, first, mid, last, temp);
41 }
42 }
43
44 int main()
45 {
46 int i,j,ncases,temp;
47
48 while(scanf("%d",&ncases) && ncases)
49 {
50 for(i=0; i<ncases; i++)
51 scanf("%d",&a[i]);
52 count = 0;
53 mergesort(a,0,ncases-1,b);
54 printf("%lld\n",count);
55 }
56 return 0;
57 }
58