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

逆序对——归并排序

逆序对满足a[i]a[j]且ij这两个条件25级校队训练赛502 - Virtual Judgehttps://vjudge.net/contest/808881#problem/D题目描述现有n个数组成了一个序列求这段正整数序列中逆序对的数目并输出解题思路采用归并排序的方法进行计算代码展现第一种#include bits/stdc.husing namespace std;int n,a[500010],c[500010];long long ans;void msort(int b,int e)//b为左边界e为右边界{if(be)return;//当左右边界相等的时候递归结束int mid(be)/2,ib,jmid1,kb;//mid将数据分成了左半部分和右半部分//i和j此时为左右两部分开始的值k是临时数组c的索引下标//k专门标记要把元素写到临时数组c的那一个位置 用于合并两个有序子数组msort(b,mid),msort(mid1,e);//保证左右区间都是严格升序的有序数组while(imidje)//i不能超过左半部分的最右边j不能超过右边界{if(a[i]a[j])c[k]a[i];//左元素小于右元素//把a[i]写到临时数组的k位置else{c[k]a[j];//左元素大于右元素此时满足a[i]a[j]ij这个条件//把a[j]写到临时数组的k位置ansmid-i1;//逆序对数量左区间剩余未遍历的元素个数mid-i1}}while(imid)c[k]a[i];//合并循环结束后把元素写入c数组中不产生多余的逆序对while(je)c[k]a[j];//合并循环结束后把元素写入c数组中不产生多余的逆序对for(int lb;le;l)a[l]c[l];//把存入临时数组c中的数据拷贝回a数组中更新值}int main(){cinn;for(int i1;in;i)cina[i];msort(1,n);coutans;return 0;}第二种#include bits/stdc.husing namespace std;const int N 500010;int a[N], tmp[N];long long ans 0;void merge(int l, int r){if(l r) return;int mid (l r) /2;merge(l, mid);merge(mid 1, r);int i l, j mid 1, k l;while(i mid j r){if(a[i] a[j]){tmp[k] a[i]; }else{ tmp[k] a[j];ans mid - i 1; }}while(i mid)tmp[k] a[i];while(j r)tmp[k] a[j];for(int p l; p r; p)a[p] tmp[p];}int main() {ios::sync_with_stdio(false);cin.tie(0);int n;cin n;for(int i 1; i n; i){cin a[i];}merge(1, n);cout ans endl;return 0;}两种代码中的核心算法始终为void msort(int b,int e)//b为左边界e为右边界{if(be)return;//当左右边界相等的时候递归结束int mid(be)/2,ib,jmid1,kb;//mid将数据分成了左半部分和右半部分//i和j此时为左右两部分开始的值k是临时数组c的索引下标//k专门标记要把元素写到临时数组c的那一个位置 用于合并两个有序子数组msort(b,mid),msort(mid1,e);//保证左右区间都是严格升序的有序数组while(imidje)//i不能超过左半部分的最右边j不能超过右边界{if(a[i]a[j])c[k]a[i];//左元素小于右元素//把a[i]写到临时数组的k位置else{c[k]a[j];//左元素大于右元素此时满足a[i]a[j]ij这个条件//把a[j]写到临时数组的k位置ansmid-i1;//逆序对数量左区间剩余未遍历的元素个数mid-i1}}while(imid)c[k]a[i];//合并循环结束后把元素写入c数组中不产生多余的逆序对while(je)c[k]a[j];//合并循环结束后把元素写入c数组中不产生多余的逆序对for(int lb;le;l)a[l]c[l];//把存入临时数组c中的数据拷贝回a数组中更新值}
http://www.zskr.cn/news/1403655.html

相关文章:

  • 为什么这么多人会选择全日制MBA?就读全日制 MBA 能收获什么?
  • 30分钟掌握GenomeScope:从k-mer直方图到基因组特性分析的终极实战指南
  • Ryujinx存档管理实战指南:3种高效备份方案保护你的Switch游戏进度
  • ESMFold蛋白质结构预测技术深度解析:从语言模型到三维结构的革命性突破
  • 3步打造永久离线图书馆:番茄小说下载器完全指南
  • 仅限内部团队使用的ChatGPT微信提示词矩阵(含政务/教育/电商垂直领域专属指令)
  • 【仅剩最后200份】ChatGPT谜题求解私藏手册:含17个工业级谜题Prompt原子模块与失效诊断矩阵
  • qmc-decoder:专业级QQ音乐加密格式转换工具,3步解锁你的音乐收藏
  • AR 巡检落地难?看这 6 个案例
  • Hypervisor反馈控制保障多核混合关键系统实时性
  • 在vue项目中快速接入taotoken大模型api的js调用指南
  • AI幻觉引发公关灾难:从监测预警、声明撰写到高管发声的9大关键动作(附GDPR/网信办双合规 checklist)
  • 脉冲神经网络进阶:星形胶质细胞与树突计算如何革新类脑智能
  • 我用Obsidian + Codex 搭了一个会持续进化的AI知识库,保姆级教程来了
  • 如何用SRWE窗口编辑器轻松突破游戏分辨率限制:终极免费工具指南
  • 抛弃内存毒瘤IDEA,AI编码时代轻量编辑器zed开发调试java教程
  • AI收录底层机制拆解:为什么企业需要系统化GEO矩阵运营
  • 5步构建你的智能无人机:STM32飞控实战指南
  • 2026年,昆明当地人常吃的美食商家究竟该选哪家?
  • 使用Taotoken后我的团队月度AI调用成本下降了百分之三十
  • 哈尔滨推荐李晓伟律师|成功处理众多保险拒赔纠纷,专业靠谱获客户认可 - 行路心安
  • 基于FPGA的低功耗神经信号采集系统设计:从架构到实现
  • 从《Project Hail Mary》到星际导航:当科幻照进现实的技术图谱
  • 腾讯文档裁员风波:大厂“降本增效”背后的技术团队生存法则
  • 微信AI机器人终极指南:5分钟打造你的智能聊天助手
  • 深度解析NVMe管理工具:揭秘nvme-cli架构设计的5大关键要素
  • Windows性能优化终极指南:如何用AtlasOS轻松提升系统速度30%
  • 【ChatGPT品牌命名黄金法则】:20年命名顾问亲授5大不可破的AI时代命名铁律
  • 仅剩最后217份|《ChatGPT婚礼策划辅助黄金提示词矩阵》V3.2内部版泄露:含酒店谈判话术、彩礼博弈模型、家族关系图谱生成器
  • 为什么你的ChatGPT总漏买酱油?揭秘购物清单生成失败背后的3层语义断层与修复方案