标签:
原题:
Description
Input
Output
Sample Input
#include<iostream> #include<cstring> #include<cstdio> using namespace std; __int64 a[100005], cnt, c[100005]; __int64 k; void merg(int low, int mid, int high) { int i = low, j = mid + 1; cnt = 0; while (i <= mid&&j <= high) { if (a[i]>a[j]) { c[cnt++] = a[j++]; k += mid - i + 1; } else { c[cnt++] = a[i++]; } } while (i <= mid) { c[cnt++] = a[i++]; } while (j <= high) { c[cnt++] = a[j++]; } cnt = 0; i = low; while (i <= high) { a[i++] = c[cnt++]; } } void merger(int low, int high) { int mid; if (low<high) { mid = (low + high) / 2; merger(low, mid); merger(mid + 1, high); merg(low, mid, high); } } int main() { int i, n, m; while (~scanf("%d%d", &n, &m)) { k = 0; for (i = 0; i<n; i++) { scanf("%I64d", &a[i]); } merger(0, n - 1); if (k - m <= 0) printf("0\n"); else printf("%I64d\n", k - m); } return 0; }
HDU 4911 Inversion - 疯狂的癫子 解题心得
标签:
原文地址:http://www.cnblogs.com/shawn-ji/p/4711856.html