首页 > 其他 > 详细

HDU 4911: Inversion

时间:2018-07-11 16:52:02      阅读:178      评论:0      收藏:0      [点我收藏+]
#include <bits/stdc++.h>
using namespace std;
const int N = 100005, INF = INT_MAX;
int n, k, A[N], L[N], R[N];
long long cnt;
void Merge(int p, int q, int r) {
int n1 = q - p + 1, n2 = r - q;
for (int i = 0; i < n1; i++)
L[i] = A[i + p];
for (int i = 0; i < n2; i++)
R[i] = A[i + q + 1];
L[n1] = INF;
R[n2] = INF;
for (int i = 0, j = 0, k = p; k <= r; k++)
if (L[i] <= R[j])
A[k] = L[i++];
else {
A[k] = R[j++];
cnt += n1 - i;
}
}
void MergeSort(int p, int r) {
if (p < r) {
int q = (p + r) / 2;
MergeSort(p, q);
MergeSort(q + 1, r);
Merge(p, q, r);
}
}
int main() {
ios::sync_with_stdio(false);
while (cin >> n >> k) {
cnt = 0;
for (int i = 0; i < n; i++)
cin >> A[i];
MergeSort(0, n - 1);
cout << max(0LL, cnt - k) << endl;
}
return 0;
}

HDU 4911: Inversion

原文:https://www.cnblogs.com/zjnu/p/9295287.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!