HDU 4944 逆序数对
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4911
题意:
给出一个序列,可以相邻的交换k次,求 k 次之后,逆序数对最少是多少;
分析:
可以发现,无论怎么交换之后,总共的逆序数对只会-1,那么结果就是,将这个序列排整齐时,要两两交换的次数-k;题目就转换为求这个序列的逆序数对有多少;
这样的两两交换好像是冒泡排序,冒泡排序是O(n^2);
正确解法是归并排序;当我们合并两个有序序列时,如果,要将后面的插入到前一个中间,那么这里就有m-i+1个逆序数对;
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + ; __int64 cnt,k;
int a[maxn],c[maxn]; void merge(int* a,int first,int mid,int last,int* c) {
int i = first,j=mid+;
int m = mid,n=last;
int k = ;
while(i<=m||j<=n) {
if(j>n||(i<=m&&a[i]<=a[j])) {
c[k++] = a[i++];
}
else {
c[k++] = a[j++];
cnt += (m-i+);
}
}
for(i=;i<k;i++)
a[first+i] = c[i];
} void mergeSort(int* a,int first,int last,int* c) {
if(first<last) {
int mid = (first+last)/;
mergeSort(a,first,mid,c);
mergeSort(a,mid+,last,c);
merge(a,first,mid,last,c);
}
} int main()
{
int n;
while(~scanf("%d%I64d",&n,&k)) {
for(int i=;i<n;i++)
scanf("%d",&a[i]);
memset(c,,sizeof(c));
cnt = ;
mergeSort(a,,n-,c);
printf("%lld\n",max(cnt-k,0LL));
}
return ;
}
HDU 4944 逆序数对的更多相关文章
- [HDU POJ] 逆序数
HDU 1394 Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3276 ...
- HDU 1394 (逆序数) Minimum Inversion Number
原来求逆序数还可以用线段树,涨姿势了. 首先求出原始序列的逆序数,然后递推每一个序列的逆序数. #include <cstdio> #include <cstring> #in ...
- HDU 1394 逆序数 线段树单点跟新 | 暴力
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- hdu 1394 逆序数(线段树)
http://acm.hust.edu.cn/vjudge/problem/15764 http://blog.csdn.net/libin56842/article/details/8531117 ...
- HDU 4911 (树状数组+逆序数)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4911 题目大意:最多可以交换K次,就最小逆序对数 解题思路: 逆序数定理,当逆序对数大于0时,若ak ...
- HDU 1394 Minimum Inversion Number(线段树/树状数组求逆序数)
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- 【归并排序】【逆序数】HDU 5775 Bubble Sort
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5775 题目大意: 冒泡排序的规则如下,一开始给定1~n的一个排列,求每个数字在排序过程中出现的最远端 ...
- HDU 1394 Minimum Inversion Number (线段树 单点更新 求逆序数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 题意:给你一个n个数的序列,当中组成的数仅仅有0-n,我们能够进行这么一种操作:把第一个数移到最 ...
- hdu 1394(线段树) 最小逆序数
http://acm.hdu.edu.cn/showproblem.php?pid=1394 给出一列数组,数组里的数都是从0到n-1的,在依次把第一个数放到最后一位的过程中求最小的逆序数 线段树的应 ...
随机推荐
- 页面跳转问题-button 确定提交按钮
form和ajax不可一起用了,button标签默认是用的form表单,所以导致跳转有问题,form不能和ajax一起用的,切记
- Beyond Compare 4试用期已过
Beyond Compare 很好用,但是只有一段时间的试用时间,当试用期过了之后就提示不能试用了 怎么办呢? 我在网上找到了两个方法: 1.直接用注册码(来自:https://blog.csdn.n ...
- 【shell】《shell学习指南》读书笔记
一.使用shell脚本 优点:脚本语言能够轻易处理文件与目录之间的对象,如把文件从所有目录拷贝到另一个目录 缺点:效率不如编译型语言 二.简单的脚本 1.查看现在系统有谁登录 $who 2.算出行数 ...
- ES6 克隆对象
浅克隆:只能克隆原始对象自身的值,不能克隆它继承的值 方法一: function clone(origin) { return Object.assign({}, origin); } 方法二: fu ...
- Nginx反向代理与负载均衡[转]
nginx启动和关闭(centos平台) /usr/local/nginx/sbin/nginx #启动 /usr/local/nginx/sbin/nginx -s reload #平滑启动 vi ...
- 弱类型dynamic与var
dynamic与var都可代替任何类型 var关键字是C# 3.0开始新增的特性,称为推断类型. 1.必须在定义时初始化 2.一但初始化完成就不能再给变量赋与初始化值类型不同的值 3.var要求是局部 ...
- 跨源资源共享(CORS)
一.跨源的定义一个“源”有三部分组成:协议.域名.端口.任一部分不一致即为跨源.比如:(http,example.com,80)和(https,example.com,443)就是不同的源. 二. ...
- 正则表达式把所有Paul替换成Ringo:Paul Puala Pualine paul Paul
代码实现如下: <!DOCTYPE html><html><body> <h2>JavaScript Regular Expressions</h ...
- stark——增删改页面
一.制作添加页面 1.前置准备 (1)修改增删改的视图函数名 class ModelStark(object): def add_view(self, request): return HttpRes ...
- with和catch改变作用域链
总结笔记: with和catch会将对象中标识符的解析添加到作用域链的最前端, 标识符的解析就是with()和catch()括号中的对象. var x = 10, y = 10; with ({x: ...