hdu4911 Inversion 2014 Multi-University Training Contest 5
2014-08-05 19:11
411 查看
Inversion
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 137 Accepted Submission(s): 57
Problem Description
bobo has a sequence a1,a2,…,an. He is allowed to swap two adjacent numbers for no more than k times.
Find the minimum number of inversions after his swaps.
Note: The number of inversions is the number of pair (i,j) where 1≤i<j≤n and ai>aj.
Input
The input consists of several tests. For each tests:
The first line contains 2 integers n,k (1≤n≤105,0≤k≤109). The second line contains n integers a1,a2,…,an (0≤ai≤109).
Output
For each tests:
A single integer denotes the minimum number of inversions.
Sample Input
3 1 2 2 1 3 0 2 2 1
Sample Output
1 2
Author
Xiaoxu Guo (ftiasch)
Source
2014 Multi-University Training Contest
5
Recommend
归并排序 直接输出max(cnt-k,0)就可以了。网上粘的模板
#include <iostream> #include <cstring> #include <cstdio> #include <cmath> #include <algorithm> #include <vector> #include <queue> #include <cstdlib> #include <limits> #define inf 0x3f3f3f3f using namespace std; __int64 cnt; void merge(__int64 A[], int p, int q, int r) { int n1 = q - p + 1; int n2 = r - q; __int64 L[n1 + 1]; __int64 R[n2 + 1]; for(int i = 0; i < n1; i++) L[i] = A[p + i]; for(int i = 0; i < n2; i++) R[i] = A[q + 1 + i]; L[n1] = numeric_limits<__int64>::max(); R[n2] = numeric_limits<__int64>::max(); int i = 0, j = 0; for(int k = p; k <= r; k++) { if(L[i] <= R[j]) { A[k] = L[i]; i++; } else { A[k] = R[j]; j++; cnt += n1 - i; } } } void mergeSort(__int64 A[], int p, int r) { if(p >= r) return ; int q = (p + r) / 2; mergeSort(A, p, q); mergeSort(A, q + 1, r); merge(A, p, q, r); } int main(){ int n,k; __int64 a[100005]; while(scanf("%d%d",&n,&k)!=EOF){ for(int i=0;i<n;i++){ scanf("%I64d",&a[i]); } cnt = 0; mergeSort(a, 0, n - 1); printf("%I64d\n",max(cnt-k,0ll)); } return 0; }
相关文章推荐
- 【2014 Multi-University Training Contest 5】 Inversion (离散化,树状数组求逆序数)
- hdu 4911 Inversion ( 2014 Multi-University Training Contest 5)
- hdu 4911 Inversion 2014 Multi-University Training Contest 5
- 2014 Multi-University Training Contest 5 HDOJ 4911 Inversion
- 2014-multi-university-training-contest-5-Inversion (离散化加线段树)
- hdu 4911 Inversion--2014 Multi-University Training Contest 5
- HDU 4939 Stupid Tower Defense (2014 Multi-University Training Contest 7)
- hdu 4941 2014 Multi-University Training Contest 7 1007
- Hdu4952 - Number Transformation - 数论(2014 Multi-University Training Contest 8)
- 2014 Multi-University Training Contest 8 1007 hdu 4951 Multiplication table
- 2014 Multi-University Training Contest 8题解
- hdu 4968 Improving the GPA--2014 Multi-University Training Contest 9
- hdu 4963 Dividing a String 中途相遇法 2014 Multi-University Training Contest 9-1004
- 2014 Multi-University Training Contest 10 题解——by BJTU
- 【比赛总结】2014 Multi-University Training Contest 9
- hdu 4902 Nice boat--2014 Multi-University Training Contest 4
- HDU 4920 Matrix multiplication(矩阵乘法小技巧)——2014 Multi-University Training Contest 5
- HDU - 6098 Inversion (2017 Multi-University Training Contest - Team 6)
- 2014 Multi-University Training Contest 1--by FZU 解题报告
- 【HDU 2014 Multi-University Training Contest 1 1002】/【HDU 4862】Jump