// UVa 10327 - Flip Sort #include <iostream> #include <algorithm> using namespace std; #define datatype long long int datatype a[1000], b[1000]; int merge(int ini, int mid, int fin) { for (int i = ini; i <= fin; i++) b[i] = a[i]; int i = ini; int j = mid + 1; int k = ini; datatype count = 0; while (k <= fin) { if (i > mid) a[k++] = b[j++]; else if (j > fin) a[k++] = b[i++]; else if (b[i] <= b[j]) a[k++] = b[i++]; else { a[k++] = b[j++]; count += mid - i + 1; } } return count; } datatype merge_sort(int ini, int fin) { if (ini == fin) return 0; else { int mid = (ini + fin) >> 1; datatype count = merge_sort(ini, mid) + merge_sort(mid + 1, fin); count += merge(ini, mid, fin); return count; } } int main() { int n; while (cin >> n) { for (int i = 0; i < n; i++) cin >> a[i]; cout << "Minimum exchange operations : " << merge_sort(0, n - 1) << endl; } return 0; }
Saturday, July 11, 2015
UVa 10327 - Flip Sort
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment