1 /*
2 * 归并排序求逆序对
3 */
4
5 #include <cstdio>
6 #include <iostream>
7
8 using namespace std;
9
10 const int N = 500005;
11
12 long long ans;
13 int a[N], b[N];
14
15 void mergeSort(int left, int right) {
16 int i, j, k, mid;
17 if (left < right) {
18 mid = (left + right) >> 1;
19 mergeSort(left, mid);
20 mergeSort(mid+1, right);
21 k = left;
22 for (i=left,j=mid+1; i<=mid&&j<=right;) {
23 if (a[i] > a[j]) b[k++] = a[j++], ans += mid-i+1;//逆序对
24 else b[k++] = a[i++];
25 }
26 while (i <= mid) b[k++] = a[i++];
27 while (j <= right) b[k++] = a[j++];
28 for (i=left; i<=right; ++i) a[i] = b[i];
29 }
30 }
31
32 int main() {
33 int n;
34 while (scanf("%d", &n), n) {
35 for (int i=1; i<=n; ++i) scanf ("%d", &a[i]);
36 ans = 0;
37 mergeSort(1, n);
38 printf ("%lld\n", ans);
39 }
40 return 0;
41 }