Merge sort the first time do, turn over the book to look at the merger of ideas to see someone else's blog.
http://poj.org/problem?id=2299
#include <stdio.h> #include <stdlib.h> #define MAX 500001int N,a[max], t[max];long long int sum;//merge void merge (int l, int m, int r) {int p=0; int i=l, j=m+1; while (i<=m && j<=r) {if (A[i]>a[j]) {t[p++]=a[j++]; sum+=m-i+1; } else {t[p++]=a[i++]; }} while (I<=m) t[p++]=a[i++]; while (J<=R) t[p++]=a[j++]; for (i=0; i<p; i++) {a[l+i]=t[i]; }}//merge sort void mergesort (int l, int r) {int m; if (l<r) {m= (l+r)/2; MergeSort (L,M); MergeSort (M+1,R); Merge (L,M,R); }}int Main () {int i; while (1) {scanf ("%d", &n); if (n = = 0) break; sum=0; for (i=0; i<n; i++) {scanf ("%d", &a[i]); } mergesort (0, n-1); printf ("%lld\n", sum); } return 0;}
Code Implementation Reference: Http://www.slyar.com/blog/poj-2299-c.html
Problem-Solving ideas reference: http://blog.csdn.net/lyy289065406/article/details/6647346
2299 ultra-quicksort (merge sort)