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

题解:学而思编程 逆序对

本文分享的必刷题目是从蓝桥云课洛谷AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。

欢迎大家订阅我的专栏:算法题解:C++与Python实现!

附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总


【题目来源】

学而思编程:逆序对

【题目描述】

对于一个包含N NN个非负整数的数组A [ 1.. n ] A[1..n]A[1..n],如果有i < j i<ji<j,且A [ i ] > A [ j ] A[i]>A[j]A[i]>A[j],则称( A [ i ] , A [ j ] ) (A[i],A[j])(A[i],A[j])为数组A AA中的一个逆序对。

例如,数组( 3 , 1 , 4 , 5 , 2 ) (3,1,4,5,2)(31452)的逆序对有( 3 , 1 ) , ( 3 , 2 ) , ( 4 , 2 ) , ( 5 , 2 ) (3,1),(3,2),(4,2),(5,2)(3,1),(3,2),(4,2),(5,2),共4 44个。

给定一个数组,求该数组中包含多少个逆序对。

【输入】

第一行,一个数n nn,表示数组中有n nn个数。

第二行n nn个数,表示给定的数组。数组中每个数字不超过10 9 10^9109

【输出】

输出数组中逆序对的数目。

【输入样例】

6 5 4 2 6 3 1

【输出样例】

11

【算法标签】

#归并排序

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=500005;intn;// 数组长度inta[N],b[N];// a: 原始数组, b: 临时数组intans;// 逆序对数量// 归并排序函数,计算逆序对数量voidmerge_sort(intl,intr){if(l==r)return;// 如果子数组只有一个元素,则不需要排序,直接返回intmid=(l+r)/2;// 计算中点merge_sort(l,mid);// 递归地对左半部分进行归并排序merge_sort(mid+1,r);// 递归地对右半部分进行归并排序intx=l,y=mid+1;// x: 左半部分的指针, y: 右半部分的指针intcnt=l-1;// b数组的指针// 合并两个有序子数组while(x<=mid&&y<=r)// 只要左右两端子数组都不为空{if(a[x]<=a[y])// 将两段子数组左端点较小者插入b数组{b[++cnt]=a[x];// 左半部分元素较小x++;}else// 右半部分元素较小{b[++cnt]=a[y];// 右半部分元素较小y++;ans+=mid-x+1;// 统计逆序对数量}}// 合并过程中其中一个子数组的元素已全部合并完成,而另一个子数组仍有剩余元素的情况for(inti=x;i<=mid;i++)// 如果左半部分还有剩余的元素,将它们复制到b中{b[++cnt]=a[i];}for(inti=y;i<=r;i++)// 如果右半部分还有剩余的元素,将它们复制到b中{b[++cnt]=a[i];}for(inti=l;i<=r;i++)// 将b中已经排序好的部分复制回a中,完成合并{a[i]=b[i];}}signedmain(){cin>>n;// 读取数组长度for(inti=1;i<=n;i++)// 读取数组元素{cin>>a[i];}merge_sort(1,n);// 调用归并排序函数cout<<ans<<endl;// 输出逆序对数量return0;}

【运行结果】

6 5 4 2 6 3 1 11
http://www.jsqmd.com/news/994014/

相关文章:

  • P8xC591 CAN控制器寄存器详解与驱动开发实战
  • 告别手动抬杆!用Java调用海康威视HCNetSDK实现道闸远程开关(附完整代码)
  • MPC8323E处理器接口电气特性与PCB布局实战指南
  • AI Agent 系统设计:工具调用的容错机制与回退策略
  • Xilinx FPGA DDR3读写控制工程(Vivado 2017.4,含完整源码与约束)
  • 2026南京闲置LV回收TOP排名,收的顶高分夺冠稳居龙头地位 - 奢侈品回收评测
  • 如何在三星上备份照片 ?
  • 如何5分钟快速上手Cat-Printer:终极开源蓝牙热敏打印解决方案
  • 粤鄂湘三地车牌识别工程:含定位、分割、汉字识别与双模型(SVM+ANN)实现
  • 如何高效整合阅读笔记:Obsidian微信读书插件的完整配置指南
  • MUSIC算法实战:从原理到MATLAB代码的DoA/AoA估计全解析
  • 医疗数据集成终极指南:5分钟掌握Mirth Connect核心实战
  • MPC8349EA时钟系统配置:从PLL原理到硬件设计的嵌入式实战指南
  • PCA9533 I2C LED驱动芯片:GPIO扩展与PWM调光实战指南
  • MSC7118 DSP时钟、DDR与电源时序设计实战指南
  • MOOTDX终极指南:Python通达信数据接口的完整免费解决方案
  • P89LPC938单片机:80C51内核加速与高集成度设计实战解析
  • 搬家寄大件快递怎么省钱?比价攻略来了 - 快递物流资讯
  • 还在手动申请和续签 SSL 证书?自动化到底能帮你省多少时间和事故?
  • (干货整理)实测好用的AI论文工具,毕业党收藏备用
  • 终极指南:如何使用Auto_Simulated_Universe实现崩坏星穹铁道模拟宇宙全自动挂机
  • 2026 深圳黄金回收优质渠道盘点 本地贵金属变现攻略 - 靖昱黄金回收
  • 用 OpenCV 5 DNN 跑 PP-OCR:一个适合新手学习的 C++ 动态库 + C# 可视化测试项目
  • VRCX:重新定义VRChat社交管理的智能伴侣
  • LeetCode CodeTop 82.删除排序链表中的重复元素Ⅱ
  • 2026年 重庆磷酸二氢钾/磷酸氢二钾/磷酸二氢钠/磷酸氢二钠/磷酸三钠厂家推荐:稳定品质与精准应用的化工源头之选 - 品牌发掘
  • Apache SeaTunnel 5 月月报:87 个 PR 合入,多维度升级功能、优化性能与修复 Bug
  • 别再手动重复造轮子了!用C#/Python为PowerMill打造你的专属自动化工具库
  • 全面解析行为验证码技术:从滑动拼图到文字点选的实战解决方案
  • P89LPC93x单片机UART、I2C、SPI、ADC外设深度解析与实战配置