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

分治算法——求逆序对

//分治算法
// 分治思想:
// 1.将数组分成左半 [left, mid] 和右半 [mid+1, right] 两个子数组。
// 2.递归统计左半、右半区间的逆序对(子问题)。
// 3.统计跨区间的逆序对(左半取一个、右半取一个的情况)。

//逆序对统计核心:
//当 a[cur1] > a[cur2] 时,因为左半数组是有序的,所以 cur1 到 mid 的所有元素都比 a[cur2] 大,
//每个元素都和 a[cur2] 构成逆序对,数量是 mid - cur1 + 1。

// 归并的必要性:
// 必须合并两个子数组并排序,否则后续递归无法正确统计跨区间的逆序对
// (只有子数组有序,才能通过 a[cur1] > a[cur2] 快速计算逆序对数量,否则和暴力算法无异)。

/*

解法一:两层for循环解法二:利用分治来解决分成三部分1.全在左边选2.全在右边选3.一左一右与归并排序中合并有序数组的流程一致一左一右:用归并排序的代码来求逆序对                                 a[cur1] <= a[cur2]  -> a[cur1]必不存在逆序对   a[cur1] > a[cur2]  -> ret += mid - cur + 1如果对数组排序的话,逆序对的个数统计的正确吗?

*/

//题目:统计一个 数组中的 逆序对

include

using namespace std;

typedef long long LL;
const int N = 5e5 + 10;
int a[N], tmp[N];

LL merge(int left, int right)
{
if(left >= right) return 0;
int mid = (left + right) / 2;
LL ret = 0;
ret += merge(left, mid);
ret += merge(mid + 1, right);
int cur1 = left, cur2 = mid + 1, i = left;
while(cur1 <= mid && cur2 <= right){
if(a[cur1] <= a[cur2]) tmp[i++] = a[cur1++];
else{
tmp[i++] = a[cur2++];
ret += mid - cur1 + 1;
}
}
while(cur1 <= mid) tmp[i++] = a[cur1++];
while(cur2 <= right) tmp[i++] = a[cur2++];
for(int i = left; i <= right; i++){
a[i] = tmp[i];
}
return ret;
}
int main(){
int n;
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
int left = 1, right = n;
cout << merge(left, right) << endl;
return 0;
}

http://www.jsqmd.com/news/444469/

相关文章:

  • word文档生成技术实现
  • C++游戏开发之旅 25
  • 使用vLLM部署Qwen/Qwen3.5-35B-A3B-FP8并且在DIFY中调用
  • ElasticSearch常见问题和注意事项
  • 一文搞懂LockSupport原理
  • Windows 安装 OpenClaw 踩坑全记录:Node、Git、CMake、VS Build Tools 一次解决
  • Flutter 三方库 preact_signals 的鸿蒙化适配指南 - 掌控极致信号响应、Signals 架构实战、鸿蒙级精密状态指控专家
  • 别只盯着模型参数了:聊聊多模态时代最容易被忽视的一件事——训练数据准备
  • 看懂“单词规律”的算法之美:为什么简单的模式匹配,其实很深
  • RAG 入门-LangChain 读取图片数据
  • 春节单位发的永辉超市卡如何回收? - 京顺回收
  • YOLO26改进66:全网首发--使用WFU改进特征融合模块
  • Kappa架构在电商大数据平台中的落地实践
  • AI+JavaWeb Vue Ajax
  • 详细介绍:数据结构之查找的方法
  • 2026年大连殡葬服务标杆机构最新推荐:大连众安诚信殡葬礼仪有限公司,一站式殡仪服务新标杆 - 海棠依旧大
  • 聚合支付系统设计方案
  • osi七层模型学习笔记
  • 2026年3月大连殡葬服务公司选择指南:殡葬一条龙、殡仪服务、殡葬用品、灵棚搭建、殡仪车出租相关公司 - 海棠依旧大
  • 保姆级VSCode入门指南,Python党直接抄作业
  • 二叉树的直径-leetcode
  • React Fibber架构设计理解
  • 2026年国内信号屏蔽仪品牌排名推荐,助您选择更具品质保障的产品 - 睿易优选
  • 嘎嘎降AI vs 学术猹 vs PaperYY降AI:同一篇论文三个结果 - 还在做实验的师兄
  • 博士论文降AI用什么工具?高要求场景下只推荐这2款 - 还在做实验的师兄
  • 论文降AI后查重率飙升怎么办?一招搞定两全其美 - 还在做实验的师兄
  • 【MySQL 数据库】MySQL 数据库核心概念详解:库、表、字段、主键与关系型模型一文读懂 - 指南
  • AI 模型服务化实战:FastAPI + vLLM 高性能部署指南
  • ARC092F - Two Faced Edges - Link
  • Logstash