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

归并排序巧解逆序对问题

逆序对归并排序模版题一.题目先简单理解下题目的意思我们要先理解何为逆序对我们输入一个n这个n数代表着这个正整数序列总共有个数像是题目所给的输出样例n6然后有5,4,2,6,3,1这六个数现在让我们判断在这个序列中有多少个逆序对我们定义俩个变量i和ji始终保持小于j如果满足这个条件的情况下ij有在i位置的数大于j位置的数即是逆序对a[i]a[j]像是i1,a[i]5,j2,a[j]4,就有ij,a[i]a[j]所以它俩就是逆序对。从题目数据上来看遍历肯定是不行的轻松超时那么这个时候就可以引入我们的归并排序的知识点了。归并排序简单来说就是拆分跟合并俩个步骤我们可以把5 4 2 6 3 1这个六个数先分为俩部分分别为5 4 2和6 3 1然后再把5 4 2分为5跟4 25 4跟2也行6 3 1分为6跟3 1接着4 2分为4跟2,3 1分为3跟1然后在倒着重新进行合并4跟2合并变为2 4,3跟1合并变为1 3然后5和2 4和进行合并2 4 5,6跟3 1合并变为1 3 6最后将2 4 5和1 3 6进行合并则变为1 2 3 4 5 6可看草稿示意图配合理解有了这样的思想那我们可以看看代码是如何实现的其实看了代码就感觉很好理解。int a[500005]{0};//存放初始序列的每个位置的值 int b[500005]{0};//充当一个拷贝数值的作用可将合并后的数值更新进a数组内 void mergesort(int l,int r)//l跟r其实就像是我们常用的sort(l,r)就是我们要排序的区间 { if(lr)return;//当lr意味着此时元素已经拆分到最小也就是拆到了只剩单个元素 int midlr1;//拆分的分界点 mergesort(l,mid);//递归调用左半部分的归并排序 mergesort(mid1,r);//递归调用右半部分归并排序 //下边开始执行时是在拆分结束后开始合并排序 int il,jmid1,kl;//k记录当前数组拷贝到了第几个i始终保持j while(imidjr)//从小到大进行排序 { if(a[i]a[j])b[k]a[i]; else { b[k]a[j]; } } while(imid)b[k]a[i];//这俩步while是上一部while后还剩余的未完成拷贝排序的补充 while(jr)b[k]a[j]; for(int il;ir;i)a[i]b[i];//将拷贝数组内的值传入原数组 }OK我们已经成功轻松的掌握了归并排序的操作那我们可以观察下归并排序函数内的操作如何进行修改或者是补充才可以对逆序对的数量进行计数while(imidjr)//我们可以借助i始终小于j的性质 { if(a[i]a[j])b[k]a[i]; else //else的触发条件其实就是a[i]a[j]而我们前面又知道i始终小于j所以每次触发我们进行一个计数即可计算出逆序对的数量 { ansmid-i1;//每次mid-i1的意思是i到mid这一区间的数都大于此时j的数(因为i到mid已经从小到大排好顺序了)且满足ij所以这一个区间都与a[j]有逆序对关系// b[k]a[j]; } }下边提供完整AC代码#includebits/stdc.h using namespace std; #define int long long #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) int a[500005]{0}; int b[500005]{0}; int ans0; void mergesort(int l,int r) { if(lr)return; int midlr1; mergesort(l,mid); mergesort(mid1,r); int il,jmid1,kl; while(imidjr) { if(a[i]a[j])b[k]a[i]; else { ansmid-i1; b[k]a[j]; } } while(imid)b[k]a[i]; while(jr)b[k]a[j]; for(int il;ir;i)a[i]b[i]; } signed main() { IOS; int n; cin n; for(int i1;in;i) { cin a[i]; } mergesort(1,n); cout ans; return 0; }

相关文章:

归并排序巧解逆序对问题

逆序对归并排序模版题 一.题目:先简单理解下题目的意思,我们要先理解何为逆序对? 我们输入一个n,这个n数代表着这个正整数序列总共有个数,像是题目所给的输出样例,n6,然后有5,4,2,6,3,1这六个数…...

Zotero Style终极指南:如何用这款免费插件打造你的专属文献管理界面

Zotero Style终极指南:如何用这款免费插件打造你的专属文献管理界面 【免费下载链接】zotero-style Ethereal Style for Zotero 项目地址: https://gitcode.com/GitHub_Trending/zo/zotero-style 还在为Zotero单调的界面而烦恼吗?想要让文献管理变…...

明日方舟游戏资源库:1000+高清素材完整获取与使用终极指南

明日方舟游戏资源库:1000高清素材完整获取与使用终极指南 【免费下载链接】ArknightsGameResource 明日方舟客户端素材 项目地址: https://gitcode.com/gh_mirrors/ar/ArknightsGameResource 还在为寻找明日方舟游戏素材而烦恼吗?想要获取高清角色…...

电路分析别死记!用Python+SymPy手把手教你搞定戴维宁等效与输入电阻计算

电路分析别死记!用PythonSymPy手把手教你搞定戴维宁等效与输入电阻计算 当电路分析遇上Python符号计算,传统的手工推导将迎来革命性升级。想象一下:面对含受控源的复杂网络时,不再需要反复检查KVL方程的正负号;计算输入…...

JSM8837DTR 1.8A/12V 低压 H 桥电机驱动芯片

在消费电子、智能硬件、小型机器人与电池供电运动控制场景中,一颗小体积、低功耗、强驱动、高可靠的电机驱动芯片,往往决定产品续航、响应速度与长期稳定性。杰盛微半导体(JSMSEMI)推出的JSM8837DTR,正是面向这类场景打…...

Product Hunt 每日热榜 | 2026-05-07

1. Shadow 2.0 标语:会议所产生的工作,在会议结束前就已经完成。 介绍:每次在线通话都会生成一个待办事项清单,而 Shadow 就是为了解决这个问题。它能够实时理解你的对话,跟踪需要完成的任务,并即时执行。…...

保姆级教程:用Node.js + Proxy搞定瑞数6代反爬(附完整代理代码与避坑点)

Node.js逆向实战:突破瑞数6代防护的代理拦截技术 最近在分析某监管类网站时,遇到了瑞数6代的反爬机制。这种防护会检测Node.js环境并拦截爬虫请求,让不少开发者头疼。本文将分享一套完整的解决方案,从环境补全到代理拦截&#xff…...

如何掌握KoboldAI本地部署:技术爱好者的AI写作助手终极指南

如何掌握KoboldAI本地部署:技术爱好者的AI写作助手终极指南 【免费下载链接】KoboldAI-Client For GGUF support, see KoboldCPP: https://github.com/LostRuins/koboldcpp 项目地址: https://gitcode.com/gh_mirrors/ko/KoboldAI-Client KoboldAI是一款开源…...

WaveTools终极指南:5分钟掌握鸣潮多账号管理与画质优化

WaveTools终极指南:5分钟掌握鸣潮多账号管理与画质优化 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 你是否为鸣潮多账号管理而烦恼?每次切换账号都要重新登录、调整画质设置&…...

SD-PPP:终极Photoshop AI插件完整指南,快速实现AI绘画工作流革命

SD-PPP:终极Photoshop AI插件完整指南,快速实现AI绘画工作流革命 【免费下载链接】sd-ppp A Photoshop AI plugin 项目地址: https://gitcode.com/gh_mirrors/sd/sd-ppp SD-PPP是一个革命性的开源Photoshop AI插件,它彻底改变了设计师…...

XSLT 实例

XSLT 实例 引言 XSLT(可扩展样式表语言转换)是一种基于XML的编程语言,用于将XML文档转换成其他格式,如HTML、PDF等。本文将通过几个实例来展示XSLT在实际应用中的使用方法。 实例一:将XML转换为HTML 以下是一个简单的XML文档示例: <?xml version="1.0"…...

jQuery Mobile 触摸事件详解

jQuery Mobile 触摸事件详解 引言 随着移动互联网的快速发展,移动端网页开发变得越来越重要。jQuery Mobile 是一个开源的移动端网页框架,它提供了一套丰富的UI组件和触摸事件,使得开发者可以轻松地构建出美观、响应迅速的移动端网页。本文将详细介绍 jQuery Mobile 的触摸…...

互联网大厂 Java 求职面试:从 Spring Boot 到消息队列的挑战

互联网大厂 Java 求职面试&#xff1a;从 Spring Boot 到消息队列的挑战在这个充满竞争的互联网大厂中&#xff0c;Java 求职者往往面临着严苛的面试考验。今天&#xff0c;我们将通过燕双非与面试官的对话&#xff0c;深入探讨在音视频场景下的求职面试。第一轮面试面试官&…...

为什么你的AI系统总过不了AISMM L2认证?——基于27家头部企业脱敏数据的6类典型失效模式分析

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AISMM L2认证失效现象全景扫描 AISMM&#xff08;AI Security Maturity Model&#xff09;L2 认证代表组织在AI系统安全治理中已建立可复用的流程与角色职责&#xff0c;但近期多个企业反馈其L2状态在第…...

互联网大厂 Java 求职面试:从 Spring Boot 到微服务

互联网大厂 Java 求职面试&#xff1a;从 Spring Boot 到微服务 在这个场景中&#xff0c;我们将看到一位求职者燕双非和面试官的对话。面试官严肃认真&#xff0c;而燕双非则总是带着幽默感来应对技术问题。第一轮提问 面试官&#xff1a;燕双非&#xff0c;首先请你介绍一下 …...

VScode安装后,如果修改中文版本? 坑是啥?

1 就是安装后&#xff0c;按照网上方法没有中文版本出来。结果测试好几次都不行&#xff0c;&#xff0c;&#xff0c;坑货啊。重新卸载插件后&#xff0c;重新安装&#xff0c;提示就有了。改变语言并且重启。才成功了。搞了半小时才出来&#xff0c; 为了这个。...

雷达工程师视角:维纳滤波如何在毫米波雷达ADBF中‘挖’出干扰零点?

雷达工程师视角&#xff1a;维纳滤波如何在毫米波雷达ADBF中‘挖’出干扰零点&#xff1f; 毫米波雷达在自动驾驶和高级驾驶辅助系统&#xff08;ADAS&#xff09;中扮演着关键角色&#xff0c;但随着车载雷达数量的激增&#xff0c;相互干扰已成为工程师面临的主要挑战之一。想…...

配置 OpenClaw Agent 工具使用 Taotoken 作为其模型供应商

配置 OpenClaw Agent 工具使用 Taotoken 作为其模型供应商 对于使用 OpenClaw 构建智能体工作流的开发者而言&#xff0c;一个稳定的模型服务接入点是项目顺利运行的基础。Taotoken 平台提供了 OpenAI 兼容的 HTTP API&#xff0c;可以作为 OpenClaw 的模型供应商&#xff0c;…...

基于A*与TEB融合的机器人路径规划自主导航【附代码】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导&#xff0c;毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;查看文章底部二维码&#xff08;1&#xff09;改进A*全局路径规划与节点剪枝策略&#xff1a;在传…...

修改_IO_2_1_stdout_的某些值来泄漏libc基地址

主要的原理可以去 https://blog.detectivelfy.top/2022/04/16/IO-FILE%E4%B9%8B%E5%88%A9%E7%94%A8stdout%E6%B3%84%E9%9C%B2libc%E5%9C%B0%E5%9D%80/ 看我们只讲实操 ✍内容 这里有两个方法 我们使用楚慧杯2024的ez_heap2作为例题 重要的代码审计 很清楚没有show函数 看的…...

植物大战僵尸PC版怎么玩才爽?这款开源工具让你掌控全局!

植物大战僵尸PC版怎么玩才爽&#xff1f;这款开源工具让你掌控全局&#xff01; 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 还在为植物大战僵尸的难度发愁吗&#xff1f;想不想拥有无限阳光、随…...

终极ComfyUI-Manager完全指南:快速部署与高效管理自定义节点

终极ComfyUI-Manager完全指南&#xff1a;快速部署与高效管理自定义节点 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various…...

FastAPI 安全认证

FastAPI 安全认证学习笔记 一、认证流程概览 FastAPI 的认证通常遵循以下流程&#xff1a; 客户端 发送请求&#xff0c;携带凭证&#xff08;如 Token、Cookie&#xff09;。中间件/依赖 拦截请求&#xff0c;提取凭证。验证逻辑 校验凭证有效性&#xff08;如 JWT 签名、密码…...

FastAPI 静态文件

FastAPI 静态文件学习笔记 一、基本用法 — StaticFiles 1. 挂载静态文件目录 from fastapi import FastAPI from fastapi.staticfiles import StaticFilesapp FastAPI()# 将 ./static 目录挂载到 /static 路径 app.mount("/static", StaticFiles(directory"…...

FastAPI CORS 跨域

FastAPI CORS 跨域学习笔记 一、什么是跨域问题 1. 同源策略 浏览器遵循同源策略&#xff08;Same-Origin Policy&#xff09;&#xff0c;限制一个源的网页向另一个源发送请求。 同源 协议 域名 端口 三者一致&#xff1a;URL AURL B是否同源原因http://example.com/ahttp:…...

别再乱用 String 了!底层原理、常量池、拼接陷阱全解析

做java开发&#xff0c;String是每天都在用的类&#xff0c;但是绝大部分人只停留在只会写、只会赋值&#xff0c;底层还不是很了解&#xff0c;很多人都有这样的疑惑&#xff1a;明明都是"abc"&#xff0c;为什么 有时候相等、有时候不相等&#xff1f;String 到底…...

LangChain vs LlamaIndex:从编排到数据,一文搞清核心区别

目录 摘要 一、核心区别&#xff1a;一句话版本 二、为什么我会觉得它们很像&#xff1f; 三、核心区别&#xff1a;完整对比 四、用 LangChain 的知识理解 LlamaIndex 五、LlamaIndex 的数据处理主线 1. Document 2. Node 3. Index 4. Retriever 5. QueryEngine 六…...

如何快速上手OpenBoardView:5个实用技巧与完整操作指南

如何快速上手OpenBoardView&#xff1a;5个实用技巧与完整操作指南 【免费下载链接】OpenBoardView View .brd files 项目地址: https://gitcode.com/gh_mirrors/op/OpenBoardView OpenBoardView是一款功能强大的开源电路板设计文件查看工具&#xff0c;专为替代传统的&…...

btcrecover技术解析:比特币钱包密码恢复引擎的架构与优化实践

btcrecover技术解析&#xff1a;比特币钱包密码恢复引擎的架构与优化实践 【免费下载链接】btcrecover An open source Bitcoin wallet password and seed recovery tool designed for the case where you already know most of your password/seed, but need assistance in tr…...

家庭暴力预警程序,报警,调解记录上链,为庇护,起诉,提供证据。

定位为 “区块链在社会治理与司法辅助中的应用示例”。一、实际应用场景描述在家庭暴力&#xff08;Domestic Violence, DV&#xff09;案件中&#xff0c;受害者常面临以下问题&#xff1a;- 暴力行为多为私密空间发生- 证据易灭失&#xff08;聊天记录删除、伤情恢复&#xf…...