hdu4911 Inversion 2014 Multi-University Training Contest 5

来源:互联网 发布:淘宝招聘信息怎么写 编辑:程序博客网 时间:2024/05/07 12:31

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 12 2 13 02 2 1
 

Sample Output
12
 

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 0x3f3f3f3fusing 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;}


0 0
原创粉丝点击