标签:
http://acm.hdu.edu.cn/showproblem.php?pid=1394
1 #include<algorithm> 2 #include<iostream> 3 #include<cstdlib> 4 #include<cstring> 5 #include<cstdio> 6 #define mid ((l+r)>>1) 7 using std::min; 8 const int Max_N = 5010; 9 const int INF = ~0u >> 1; 10 int cnt, arr[Max_N], ret[Max_N], temp[Max_N]; 11 void Merge(int *A, int l, int m, int r) { 12 int p = 0; 13 int x = l, y = m + 1; 14 while (x <= m && y <= r) { 15 if (A[x] > A[y]) cnt += m - x + 1, temp[p++] = A[y++]; 16 else temp[p++] = A[x++]; 17 } 18 while (x <= m) temp[p++] = A[x++]; 19 while (y <= r) temp[p++] = A[y++]; 20 for (x = 0; x < p; x++) A[l + x] = temp[x]; 21 } 22 void MergeSort(int *A, int l, int r) { 23 if (l < r) { 24 MergeSort(A, l, mid); 25 MergeSort(A, mid + 1, r); 26 Merge(A, l, mid, r); 27 } 28 } 29 int main() { 30 #ifdef LOCAL 31 freopen("in.txt", "r", stdin); 32 freopen("out.txt", "w+", stdout); 33 #endif 34 int n; 35 while (~scanf("%d", &n)) { 36 for (int i = 0; i < n; i++) scanf("%d", &arr[i]), ret[i] = arr[i]; 37 cnt = 0; 38 MergeSort(arr, 0, n - 1); 39 int res = INF; 40 for (int i = 0; i < n; i++) { 41 cnt = cnt + n - ret[i] - ret[i] - 1; 42 res = min(res, cnt); 43 } 44 printf("%d\n", res); 45 } 46 return 0; 47 }
hdu 1394 Minimum Inversion Number
标签:
原文地址:http://www.cnblogs.com/GadyPu/p/4538836.html