博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU4911-Inversion
阅读量:6847 次
发布时间:2019-06-26

本文共 1051 字,大约阅读时间需要 3 分钟。

题意:依据题目要求交换相邻的两个元素k次,使得最后剩下的逆序对数最少

思路:假设逆序数大于0,存在0 <= i < n使得交换Ai,Ai+1后逆序数降低1,所求答案就为max(inversion - k, 0);

利用归并排序计算逆序对数。

#include 
#include
#include
using namespace std;const int MAXN = 1000005;int arr[MAXN], b[MAXN];int n, k;long long cnt;void merge_sort(int * a, int x, int y, int *b) { if (y - x > 1) { int m = x + (y - x) / 2; int p = x, q = m, i = x; merge_sort(a, x, m, b); merge_sort(a, m, y, b); while (p < m || q < y) { if (q >= y || (p < m && a[p] <= a[q])) b[i++] = a[p++]; else { b[i++] = a[q++]; cnt += m - p; } } for (i = x; i < y; i++) a[i] = b[i]; }}int main() { while (scanf("%d%d", &n, &k) != EOF) { for (int i = 0; i < n; i++) scanf("%d", &arr[i]); cnt = 0; merge_sort(arr, 0, n, b); if (cnt - k > 0) cnt -= k; else cnt = 0; cout << cnt << endl; } return 0;}

转载地址:http://evoul.baihongyu.com/

你可能感兴趣的文章
CentOs6.5基本环境配置(六):Maven配置
查看>>
Python 创建Django项目
查看>>
JS获取当前项目的根路径
查看>>
操作系统引导区代码
查看>>
程序员有五种错误不应犯
查看>>
无线认证知识点
查看>>
基于python的REST框架eve测试与mongodb的数据操作
查看>>
epoll模型的理解封装与应用
查看>>
Lync 2013部署图片赏析-证书服务安装配置
查看>>
HTML5 本地缓存 (web存储)
查看>>
tomcat redis session共享(包含redis安全设置)
查看>>
iptables中DNAT、SNAT和MASQUERADE的作用
查看>>
kvm命令学习记录
查看>>
小菜鸡进阶之路-First week
查看>>
ORACLE 10g SYSAUX表空间快速增长之WRH$_ACTIVE_SESSION_HISTORY篇
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
linux 下安装zip
查看>>
我的友情链接
查看>>
python-标示符和关键字
查看>>