当前位置: 首页 > news >正文

[HDOJ4911]Inversion

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4911

求经过k次交换后的逆序数对数。

 

归并排序解法:用该数列的逆序对数减去k,如果大于0则答案就是这个差,否则就是0。(根据逆序对的性质得到)

代码如下:

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <iomanip>
 4 #include <cstring>
 5 #include <climits>
 6 #include <complex>
 7 #include <fstream>
 8 #include <cassert>
 9 #include <cstdio>
10 #include <bitset>
11 #include <vector>
12 #include <deque>
13 #include <queue>
14 #include <stack>
15 #include <ctime>
16 #include <set>
17 #include <map>
18 #include <cmath>
19 
20 using namespace std;
21 
22 typedef long long LL;
23 const int maxn = 100010;
24 int num[maxn];
25 LL ans;
26 int n, k;
27 
28 void merge(int p, int m, int q) {
29     static int ll[maxn>>1], rr[maxn>>1];
30     int n1 = m - p + 1;
31     int n2 = q - m;
32     for(int i = 0; i < n1; i++)    ll[i] = num[p+i];
33     for(int i = 0; i < n2; i++)    rr[i] = num[m+i+1];
34     int i = 0, j = 0;
35     while(i < n1 && j < n2) {
36         if(ll[i] <= rr[j])    num[p++] = ll[i++];
37         else {
38             num[p++] = rr[j++];
39             ans += (n1 - i);
40         }
41     }
42     while(i < n1) num[p++] = ll[i++];
43     while(j < n2) num[p++] = rr[j++];
44 }
45 
46 void mergesort(int p, int q) {
47     if(p < q) {
48         int m = (p + q) >> 1;
49         mergesort(p, m);
50         mergesort(m+1, q);
51         merge(p, m, q);
52     }
53 }
54 
55 int main() {
56     // freopen("in", "r", stdin);
57     while(~scanf("%d %d", &n, &k)) {
58         ans = 0;
59         for(int i = 0; i < n; i++) {
60             scanf("%d", &num[i]);
61         }
62         mergesort(0, n-1);
63         printf("%I64d\n", ans > k ? ans - k : 0);
64     }
65 }
Mergesort

 

转载于:https://www.cnblogs.com/kirai/p/4857290.html

相关文章:

  • MySQL的Auto-Failover功能
  • (转)菜鸟学数据库(三)——存储过程
  • Swift - 禁用UIWebView和WKWebView的下拉拖动效果
  • ubuntu上hadoop 单节点伪分布式安装测试
  • 开发npm模块经验总结
  • Fiddler
  • 菜鸟的it之路-起航
  • 10分钟掌握XML、JSON及其解析
  • WIN32编程经验总结
  • awk 内容
  • (算法)Game
  • Java Web项目的发布
  • 学习git遇到的问题的提出与总结
  • 鸡蛋的硬度
  • 百度基础技术测试部一面2015/10/15 实习生
  • angular组件开发
  • const let
  • Django 博客开发教程 8 - 博客文章详情页
  • Git初体验
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Java的Interrupt与线程中断
  • java中的hashCode
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Mysql数据库的条件查询语句
  • RxJS: 简单入门
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Spring声明式事务管理之一:五大属性分析
  • VuePress 静态网站生成
  • vuex 学习笔记 01
  • 从输入URL到页面加载发生了什么
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 浅谈web中前端模板引擎的使用
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 时间复杂度与空间复杂度分析
  • 使用putty远程连接linux
  • 思否第一天
  • 思考 CSS 架构
  • 温故知新之javascript面向对象
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 用 Swift 编写面向协议的视图
  • HanLP分词命名实体提取详解
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • # include “ “ 和 # include < >两者的区别
  • #{} 和 ${}区别
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (31)对象的克隆
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (一)UDP基本编程步骤
  • (转)JAVA中的堆栈
  • .form文件_SSM框架文件上传篇