逆序对的数量 刷题笔记

思路  

使用归并排序 

在每次返回时 更新增加答案数 

因为归并排序的两个特点

第一 使用双指针算法 

第二  层层返回 从局部有序合并到整体有序 

例如  

{4 ,1 ,2 ,3}

划分到底层是四个数组    {4},{1},{3}, {2};

先合并{4} {1} 为{1,4};4>1 逆序对数量+1

在合并 {3},{2}为{ 2 ,3} 逆序对数量再+1;

此时我们获得了两个局部有序的数组 

{1,4}  ,{2 ,3}

将其合并成{1,2,3,4}即可整体有序 

此时左指针指向1 右边的2,3 都比1大 所以逆序对数量不改变

然后左指针++,指向4 右边有两个小于4 逆序对数量+2;

所以合并完成后总逆序对数量为4 

而这个数量计算关系公式为res += mid - i + 1;

然后我们再每次都   将res的数量更新到答案

LL res = merge_sort(q, l, mid) + merge_sort(q, mid + 1, r);

这样在每一层返回时 res的值都会被加回来

代码

#include<iostream>
using namespace std;
typedef long long LL;

const int N=1e5+10;
int q[N],tmp[N];
LL merge_sort(int q[],int l,int r){
    if(l>=r){
        return 0;
    }
    int mid=l+r>>1;
     LL res = merge_sort(q, l, mid) + merge_sort(q, mid + 1, r);

    
    int i=l,k=0,j=mid+1;
    while(i<=mid&&j<=r){
        if(q[i]<=q[j]){
            tmp[k++]=q[i++]; 
        }else{
            res += mid - i + 1;
            tmp[k++]=q[j++];
            
        }
        
    }
    while(i<=mid){
        tmp[k++]=q[i++];
    }
    while(j<=r) {
        tmp[k++]=q[j++];
    }
    
    for (i = l, j = 0; i <= r; i ++, j ++ ) {
    q[i] = tmp[j];}

    return res;
    
}
int main(){
    
     int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i ++ ) scanf("%d", &q[i]);

  cout <<merge_sort(q, 0, n - 1) << endl;

    
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【算法杂货铺】二分算法

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 朴素二分查找 &#x1f4c2; 朴素二分模板 &#x1f4c1; 查找区间端点处 细节&#xff08;重要&#xff09; &#x1f4c2; 区间左端点处模板 &#x1f4c2; 区间右端点处模板 &#x1f4c1; 习题 1. 35. 搜索插入位…

『 Linux 』进程替换( Process replacement ) 及 简单Shell的实现(万字)

文章目录 &#x1f984; 进程替换&#x1f9a9; execl()函数&#x1f9a9; execlp()函数&#x1f9a9; execle()函数&#x1f9a9; execv()函数&#x1f9a9; execvp()函数&#x1f9a9; execvpe()函数&#x1f9a9; execve()函数 &#x1f984; 简单Shell命令行解释器的实现&a…

Centos8安装Docker,使用阿里云源

一、前期准备 1.关闭防火墙&#xff0c;SELINUX systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0 sed -i "s/SELINUXenforcing/SELINUXdisabled/g" /etc/selinux/config查看状态 systemctl status firewalld systemctl status…

汇编语言(Assemble Language)学习笔记(更新中)

零.学习介绍和使用工具 【1】我们使用的教材是机械工业出版社的《32位汇编语言程序设计第二版》。 指导老师是福州大学的倪一涛老师。 这门课程教授的是Intel 80*86系列处理器的32位汇编。我们现在的处理器都兼容这个处理器。 这篇博客只是大二下汇编语言学习的总结&#xff…

【C++设计模式】策略模式

文章目录 前言一、策略模式是什么&#xff1f;二、策略模式的实现原理三、UML图四、代码实现总结 前言 策略模式是一种行为设计模式&#xff0c;它允许在运行时选择算法的行为。通过将每个算法封装到具有共同接口的独立类中&#xff0c;客户端可以在不改变自身代码的情况下选择…

css3 实现html样式蛇形布局

文章目录 1. 实现效果2. 实现代码 1. 实现效果 2. 实现代码 <template><div class"body"><div class"title">CSS3实现蛇形布局</div><div class"list"><div class"item" v-for"(item, index) …

【C#】WPF 将string数据导出txt

示例 代码 string allInfo "123"; SaveFileDialog saveFileDialog new SaveFileDialog(); saveFileDialog.Filter "*.txt|*.txt|所有文件(*.*)|*.*"; if (!(bool)saveFileDialog.ShowDialog()) {return; } string fileName saveFileDialog.FileName; …

arcgis 计算某点到其他城市的距离,含要素转点(以北京市到各个地级市的距离为例)

导入地级市的地图导入要计算距离的地带你计算距离&#xff1a;点距离或者近邻分析 以北京市到各个地级市的距离为例 到入地级市&#xff0c;并复制一个同款地级市&#xff0c;导入一个有北京市的Excel 将一个地级市进行要素转点&#xff1a;data management tools——要素——…

【C语言】—— 指针二 : 初识指针(下)

【C语言】——函数栈帧 一、 c o n s t const const 修饰指针1.1、 c o n s t const const 修饰变量1.2、 c o n s t const const 修饰指针 二、野指针2.1野指针的成因&#xff08;1&#xff09;指针未初始化&#xff08;2&#xff09;指针越界访问&#xff08;3&#xff09;指…

4.9.CVAT——用长方体进行注释

文章目录 1.创建长方体1.1.按4点绘制长方体1.2.从长方形画出长方体 2.编辑长方体 它用于注释 3 维物体&#xff0c;例如汽车、盒子等。目前该功能支持单点透视&#xff0c;并具有垂直边缘与侧面完全平行的约束。 1.创建长方体 1.1.按4点绘制长方体 在开始之前&#xff0c;您必…

基于Java+SpringMVC+vue+element宠物管理系统设计实现

基于JavaSpringMVCvueelement宠物管理系统设计实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源…

华为配置中心AP内漫游实验

华为配置中心AP内漫游示例 组网图形 图1 配置中心AP内漫游组网图 配置流程组网需求配置思路数据规划配置注意事项操作步骤配置文件 配置流程 WLAN不同的特性和功能需要在不同类型的模板下进行配置和维护&#xff0c;这些模板统称为WLAN模板&#xff0c;如域管理模板、射频模…

❤ css布局篇

❤ css布局篇 一、基础布局 &#xff08;1&#xff09;居中布局 ① 文字居中 <div class"div1">测试文字居中</div> body {margin: 0;padding: 0;padding: 10%; } .div1 {width: 100px;height: 100px;background: cadetblue;text-align: center; }te…

微信小程序--分享如何与ibeacon蓝牙信标建立联系

ibeacon蓝牙设备 iBeacon是苹果公司2013年9月发布的移动设备用OS&#xff08;iOS7&#xff09;上配备的新功能。其工作方式是&#xff0c;配备有 低功耗蓝牙&#xff08;BLE&#xff09;通信功能的设备使用BLE技术向周围发送自己特有的ID&#xff0c;接收到该ID的应用软件会根…

数据结构(三)——栈和队列的应用

3.3 栈和队列的应用 3.3.1 栈在括号匹配中的应用 用栈实现括号匹配&#xff1a; 最后出现的左括号最先被匹配 &#xff08;栈的特性——LIFO&#xff09;。遇到左括号就入栈&#xff0c;遇到右括号&#xff0c;就“消耗”一个左括号&#xff08;出栈&#xff09;。 匹配失败…

【Numpy】练习题100道(26-50题)

#学习笔记# 在学习神经网络的过程中发现对numpy的操作不是非常熟悉&#xff0c;遂找到了Numpy 100题。 Git-hub链接 1.题目列表 26. 下面的脚本输出什么&#xff1f;(★☆☆) print(sum(range(5),-1)) from numpy import * print(sum(range(5),-1)) 27. 考虑一个整数向量…

检查1个变量是否对另1个变量是否有显著影响

from&#xff1a;SPSS系列|手把手教你做卡方检验 - 知乎 (zhihu.com) 什么时候用&#xff1f; 实例学习 SPSS系列|手把手教你做卡方检验 - 知乎 (zhihu.com)

YOLOv8 | 有效涨点,添加GAM注意力机制,使用Wise-IoU有效提升目标检测效果(附报错解决技巧,全网独家)

目录 摘要 基本原理 通道注意力机制 空间注意力机制 GAM代码实现 Wise-IoU WIoU代码实现 yaml文件编写 完整代码分享&#xff08;含多种注意力机制&#xff09; 摘要 人们已经研究了各种注意力机制来提高各种计算机视觉任务的性能。然而&#xff0c;现有方法忽视了…

Paimon新版本核心特性和生产实践解读

最近Apche Paimon发布了最新版本0.7.0&#xff0c;在这个版本中&#xff0c;Paimon对一些新特性进行了增强。 Paimon在数据湖领域发展迅速&#xff0c;未来会在整个数据开发领域占有很重要的地位&#xff0c;今天我们来盘点一下当前能力的特点以及在生产环境中的使用情况。 Loo…

【C++】手撕AVL树

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;能直接手撕AVL树。 > 毒鸡汤&#xff1a;放弃自…