逆序对数量(归并排序做法)

 

先给出上一篇文章归并排序模板-CSDN博客里的归并排序模板:

#include<iostream>
using namespace std;const int N = 100010;int n;
int q[N], temp[N];void merge_sort(int q[], int l, int r)
{if(l >= r) return;int mid = (l+r) >> 1;merge_sort(q, l, mid), merge_sort(q, mid+1, r);int i = l, j = mid+1, k = 0;while(i <= mid && j <= r) //对应步骤(3),而且当两个数组的指针都没有越界时才这么做{if(q[i] < q[j]) temp[k++] = q[i++];else            temp[k++] = q[j++];}while(i <= mid)     temp[k++] = q[i++]; //如果i没有越界,则将i后面的原封不动地拷贝进去while(j <= r)       temp[k++] = q[j++]; //如果j没有越界,则将j后面拷贝进去//q和temp数组的范围不同,因此需要两个变量i,j//         注意不是i <= nfor(int i=l, j=0; i <= r; ++i, ++j) q[i] = temp[j]; //步骤(4),注意写法
}int main()
{scanf("%d", &n);for(int i=0;i<n;++i) scanf("%d", &q[i]);merge_sort(q, 0, n-1);for(int i=0;i<n;++i) printf("%d ", q[i]);return 0;
}

 下面是求逆序对的过程,可以看到只需要在归并过程中加入计算逆序对数量的步骤即可。

#include<iostream>
using namespace std;const int N = 100010;int n = 0;
int q[N], temp[N];
long long res = 0;void merge_sort(int q[], int l, int r)
{if(l >= r) return;int mid = (l+r) >> 1;merge_sort(q, l, mid), merge_sort(q, mid+1, r);int i = l, j = mid+1, k = 0;while(i <= mid && j <= r){                                       //归并排序里这里也可以是≤号if(q[i] <= q[j]) temp[k++] = q[i++];//由于逆序对需要严格大于,因此这里是≤号else{temp[k++] = q[j++];res += mid - i + 1;//和归并排序不一样,由于i肯定小于j,因此只有//当q[i]>q[j]时才是逆序对,而且[i,mid]范围内的所有数都能//和q[j]构成逆序对,共mid-i+1个。}}while(i <= mid)     temp[k++] = q[i++]; while(j <= r)       temp[k++] = q[j++]; for(int i=l, j=0; i <= r; ++i, ++j) q[i] = temp[j]; //这一步不能省去
}int main()
{cin>>n;for(int i=0;i<n;++i) cin>>q[i];merge_sort(q, 0, n-1);cout<<res;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/641806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爬虫安居客新房

一、首先看网址 后面有全部代码 https://hf.fang.anjuke.com/loupan/baohequ/p3 这种形式很好分析&#xff0c;https://hf.fang.anjuke.com/loupan/行政区域页码 xinfang_area ["feixixian", "baohequ", "shushanqu", "luyangqu",…

#GPU|LLM|AIGC#集成显卡与独立显卡|显卡在深度学习中的选择与LLM GPU推荐

区别 核心区别&#xff1a;显存&#xff0c;也被称作帧缓存。独立显卡拥有独立显存&#xff0c;而集成显卡通常是没有的&#xff0c;需要占用部分主内存来达到缓存的目的 集成显卡&#xff1a; 是集成在主板上的&#xff0c;与主处理器共享系统内存。 一般会在很多轻便薄型的…

机械臂雅可比矩阵的矢量积理解和matlab实现

雅可比矩阵的第Ji列&#xff1a; 关于一些基本概念可以参考博客&#xff0c;部分细节如下&#xff1a; 每个移动关节&#xff0c;Ji可以这样计算&#xff1a; 每个旋转关节&#xff0c;Ji这样计算&#xff1a; 有时候要求按照末端执行器坐标系{n}来执行一些位移旋转之类的…

uniapp中vue2项目导入高德地图

1、看官网新手入门链接导入原生高德地图&#xff1a; JS API 结合 Vue 使用-基础-进阶教程-地图 JS API 2.0|高德地图API (amap.com) 具体步骤&#xff1a; 第一步&#xff0c;安装插件 npm i amap/amap-jsapi-loader --save 第二步&#xff0c;在vue组件中写代码显示地图…

[数据结构]顺序表

1、顺序表的概念及结构 1.1 线性表 线性表&#xff08; linear list &#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#…

品牌价值的累积与倍增:指数函数的含义及其在企业运营中的应用

品牌的价值日益凸显。品牌价值的累积与倍增不仅是企业追求的目标&#xff0c;也是市场竞争的重要标志。指数函数作为一种数学模型&#xff0c;对于描述品牌价值的增长具有重要意义。本文将深入探讨指数函数的含义及其在企业运营中的应用&#xff0c;并分析如何通过持续创新、品…

【DevOps】Jenkins Extended E-mail 邮件模板添加自定义变量

文章目录 1、配置Jenkins邮箱2、配置告警模板1、配置Jenkins邮箱 略 2、配置告警模板 自定义变量:DYSK_PYTEST_STATUS // Uses Declarative syntax to run commands inside a container. pipeline {agent {kubernetes {cloud "kubernetes" //选择名字是kuberne…

绘制PCB封装库的神器

我们平时绘制PCB封装时&#xff0c;一般都是按照元器件数据表上的封装图来绘制&#xff0c;有一些ECAD软件提供了向导&#xff0c;但是这个过程还是比较繁琐。现在有很多大厂比如TI都会提供芯片封装库&#xff0c;一般需要Ultra Librarian软件才能打开&#xff0c;然后再转换成…

【ZYNQ入门】第十篇、基于FPGA的图像白平衡算法实现

目录 第一部分、关于白平衡的知识 1、MATLAB 自动白平衡算法的实现 1.1、matlab代码 1.2、测试效果 1.3 测试源图 2、为什么摄像头采集的图像要做白平衡 3、自动白平衡算法总结 4、FPGA设计思路 4.1、实时白平衡的实现 4.2、计算流程优化思路 第二部分、硬件实…

如何查看Linux CPU占有率

目录 1、top 2、htop 3、vmstat 4、mpstat 5、iostat 查看嵌入式设备CPU占有率是评估系统资源使用情况的重要方式。 在Linux系统中&#xff0c;有多种方法可以查看CPU占有率&#xff0c;这里介绍几种常用的命令行工具。 1、top 这是最常用的命令之一&#xff0c;它提供了…

C语言之反汇编查看函数栈帧的创建与销毁

文章目录 一、 什么是函数栈帧&#xff1f;二、 理解函数栈帧能解决什么问题呢&#xff1f;三、 函数栈帧的创建和销毁解析3.1、什么是栈&#xff1f;3.2、认识相关寄存器和汇编指令3.2.1 相关寄存器3.2.2 相关汇编命令 3.3、 解析函数栈帧的创建和销毁3.3.1 预备知识3.3.2 代码…

AI对比:ChatGPT和文心一言的区别和差异

目录 一、ChatGPT和文心一言大模型的对比分析 1.1 二者训练的数据情况分析 1.2 训练大模型数据规模和参数对比 1.3 二者3.5版本大模型对比总结 二、ChatGPT和文心一言功能对比分析 2.1 二者产品提供的功能情况分析 2.2 测试一下各种功能的特性 2.2.1 文本创作能力 2.2…

婴儿洗衣机怎么选?热门品牌希亦、觉飞、由利详细测评

宝宝的衣物是不是要和大人的衣服分开洗呢&#xff1f;这是很多新手爸妈都会遇到的一个问题。有的人认为&#xff0c;宝宝的衣服要单独洗&#xff0c;以免被大人的衣服上的细菌污染&#xff1b;有的人认为&#xff0c;宝宝的衣服可以和大人的衣服一起洗&#xff0c;这样可以节省…

优先级队列(堆)

目录 1 概念 2 堆的概念 2.1小根堆 2.2大根堆 3堆的存储方式​​​​​​​ 4、堆的创建 4.1堆向下调整 5、时间复杂度 6、堆的插入&#xff08;向上调整&#xff09; 7、堆的删除 8、PriorityQueue的特性 9、堆排序 1 概念 我们知道的队列&#xff0c;队列是一…

leetcode---Z字形变换

题目&#xff1a; 将一个给定字符串 s 根据给定的行数 numRows &#xff0c;以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "PAYPALISHIRING" 行数为 3 时&#xff0c;排列如下&#xff1a;之后&#xff0c;你的输出需要从左往右逐行读取&#xff0c;产生…

redis高可用之主从部署

文章目录 前言1. 同步以及命令传播1.1 同步1.2 命令传播 2. 解决从服务器断线重连2.1 解决方案 3. PSYNC命令4. 复制步骤1:设置主服务器的地址和端口步骤2:建立套接字连接 ——其实就是建立TCP连接步骤3:发送PING命令步骤4:身份验证步骤5:发送端口信息步骤6:同步步骤7:命令传播…

鸿蒙5.0发布时间已定!何处寻得移动开发加速器?

直接在百度上搜索「鸿蒙5.0发布时间」&#xff0c;出来的结果&#xff0c;那一个比一个焦虑~~ 百度的AI基于综合内容判断得出&#xff0c;鸿蒙5.0的发布时间在2023-04-17 百度知道推的答案是202年年4月中 但不管几月&#xff0c;“鸿蒙元年”似乎都是确定的&#xff0c;就是…

Linux切换jdk版本

参考文献&#xff1a;Linux 多个JDK的版本 脚本切换 - C小海 - 博客园 (cnblogs.com)

ZYNQ-7020 集成了运行NI Linux Real‑Time的实时处理器,支持FPGA二次开发

模拟和数字I/O&#xff0c;667 MHz双核CPU&#xff0c;512 MB DRAM&#xff0c;512 MB存储容量&#xff0c;Zynq-7020 FPGA CompactRIO Single-Board控制器 sbRIO‑9637是一款嵌入式控制器&#xff0c;在单块印刷电路板(PCB)上集成了运行NI Linux Real‑Time的实时处理器、用户…

RK3568 移植Ubuntu

使用ubuntu-base构建根文件系统 1、到ubuntu官网获取 ubuntu-base-18.04.5-base-arm64.tar.gz Ubuntu Base 18.04.5 LTS (Bionic Beaver) 2、将获取的文件拷贝到ubuntu虚拟机,新建目录,并解压 mkdir ubuntu_rootfs sudo tar -xpf u