http://acm.hdu.edu.cn/showproblem.php?pid=4911   归并排序求逆对数。

Inversion

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 556    Accepted Submission(s):
239

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
题意:相邻的最多调换k次,使得逆对数最小,
思路,先求出整个序列的逆对数-k次就可,如果出现负数就输出为0.用归并排序求逆对数。
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
__int64 a[],cnt,c[];
__int64 k;
void merg(int low, int mid, int high)
{
int i=low, j=mid+;
cnt=;
while(i<=mid&&j<=high)
{
if(a[i]>a[j])
{
c[cnt++]=a[j++];
k+=mid-i+;
}
else
{
c[cnt++]=a[i++];
}
}
while(i<=mid)
{
c[cnt++]=a[i++];
}
while(j<=high)
{
c[cnt++]=a[j++];
}
cnt=;i=low;
while(i<=high)
{
a[i++]=c[cnt++];
}
}
void merger(int low, int high)
{
int mid;
if(low<high)
{
mid=(low+high)/;
merger(low,mid);
merger(mid+,high);
merg(low,mid,high);
}
}
int main()
{
int i,n,m;
while(~scanf("%d%d",&n,&m))
{
k=;
for(i=; i<n; i++)
{
scanf("%I64d",&a[i]);
}
merger(,n-);
if(k-m<=)
printf("0\n");
else
printf("%I64d\n",k-m);
}
return ;
}
 

HDU 4911 Inversion的更多相关文章

  1. hdu 4911 Inversion(找到的倒数)

    主题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4911 Inversion Time Limit: 2000/1000 MS (Java/Others) ...

  2. HDU 4911 Inversion (逆序数 归并排序)

    Inversion 题目链接: http://acm.hust.edu.cn/vjudge/contest/121349#problem/A Description bobo has a sequen ...

  3. hdu 4911 Inversion(归并排序求逆序对数)2014多校训练第5场

    Inversion                                                                             Time Limit: 20 ...

  4. 2014多校第五场1001 || HDU 4911 Inversion (归并求逆序数)

    题目链接 题意 : 给你一个数列,可以随意交换两相邻元素,交换次数不超过k次,让你找出i < j 且ai > aj的(i,j)的对数最小是多少对. 思路 : 一开始想的很多,各种都想了,后 ...

  5. hdu 4911 Inversion (分治 归并排序 求逆序数)

    题目链接 题意:给n个数,求交换k次相邻的数之后的最小的逆序数对. 用分治的方法,以前在poj上做过这种题,昨天比赛的时候忘了.... 下面的归并排序还是以前的模板. #include <ios ...

  6. HDU 4911 Inversion 树状数组求逆序数对

    显然每次交换都能降低1 所以求出逆序数对数,然后-=k就好了.. . _(:зゝ∠)_ #include<stdio.h> #include<string.h> #includ ...

  7. hdu 4911 Inversion and poj2299 [树状数组+离散化]

    题目 题意:  给你一串数字,然后给你最多进行k次交换(只能交换相邻的)问交换后的最小逆序对个数是多少. 给你一个序列,每次只能交换相邻的位置,把他交换成一个递增序列所需要的最少步数 等于 整个序列的 ...

  8. HDU 6098 - Inversion | 2017 Multi-University Training Contest 6

    /* HDU 6098 - Inversion [ 贪心,数论 ] | 2017 Multi-University Training Contest 6 题意: 求出所有B[i] = max(A[j] ...

  9. HDU 4911 (树状数组+逆序数)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4911 题目大意:最多可以交换K次,就最小逆序对数 解题思路: 逆序数定理,当逆序对数大于0时,若ak ...

随机推荐

  1. SDUT1500 Message Flood

    以前做过的用的字典树,可是貌似现在再用超内存....求解释... 问了LYN用的map函数做的,又去小小的学了map函数.... http://wenku.baidu.com/view/0b08cec ...

  2. NuGet学习笔记——初识NuGet及快速安装使用

    源自:http://kb.cnblogs.com/page/143190/

  3. 套题T4

    Problem 1 无聊的gcd(gcd.c/cpp/pas) 话说出题人不会被查水表吧. 简单的问题描述:从N个正整数里面取出K个数的最大公因数最大是多少.(请将答案乘上k之后输出哦,谢谢合作.) ...

  4. JTable指定单元格加控件

    原文链接:http://blog.csdn.net/transit136/article/details/2133638 JTable可以给表格的某一列加入控件,下面方法可以实现   try{   T ...

  5. css3 去掉点击高光(移动端)

    在我们用手机浏览网页时,当点击某个链接或者点击事件时 会出现一层蓝色半透明的高光显示, 但在开发webapp时,由于网页是被native load去的,在app里面点击的时候如果出现高光则显得很不和谐 ...

  6. 关于引用mshtml的问题

    今天看了个验证码识别的代码,其中引用到了mshtml.dll,找了半天原来就是microsoft.mshtml.dll.查这个dll的时候还发现了好几篇关于这个dll添加问题的文章.顺便看了下,原来这 ...

  7. Android动画效果translate、scale、alpha、rotate

    overridePendingTransition只支持android 2.0以上版本,动画效果在anim目录下的xml文件中定义,在程序中用AnimationUtils.loadAnimation( ...

  8. linux文件和目录基本操作

    比较特殊的目录: .   代表此层目录 .. 代表上一层目录 - 代表前一个工作目录 -代表当前用户身份所在的主文件夹 -account 代表account用户所在主文件夹 1.目录相关操作 cd切换 ...

  9. js风格技巧

    1.一个页面的所有js都可以写成这样,比如:   var index ={};   index.User = ****;   index.Init = function(){ $("$tes ...

  10. ASP.NET MVC 学习5、登陆页面改为SSO验证

    单点登录(SSO,single sign-on)是一个会话或用户身份验证过程,用户只需要登录一次就可以访问所有相互信任的应用系统,二次登录时无需重新输入用户名和密码.简化账号登录过程并保护账号和密码安 ...