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

AcWing 788:逆序对的数量 ← 树状数组 + 离散化(数组 + sort + STL map)

【题目来源】
https://www.acwing.com/problem/content/790/

【题目描述】
给定一个长度为 n 的整数数列,请你计算数列中的逆序对的数量。
逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i<j 且 a[i]>a[j],则其为一个逆序对;否则不是。

【输入格式】
第一行包含整数 n,表示数列的长度。
第二行包含 n 个整数,表示整个数列。

【输出格式】
输出一个整数,表示逆序对的个数。

【输入样例】
6
2 3 4 5 6 1

【输出样例】
5

【数据范围】
1≤n≤100000,
数列中的元素的取值范围 [1,10^9]。

【算法分析】
● 本题数据个数为 1e5,但数据范围至 1e9,比较稀疏,故需进行离散化。

● 传统的逆序对统计需要两两比较数值大小,需要检查 C(n,2)=n(n-1)/2 对组合,时间复杂度为 O(n²)。而“树状数组+离散化”方法,不直接比较“数值”,而是通过树状数组去查询“位置”的统计信息。通过巧妙的数据结构转换,将问题降维为高效的前缀和查询,时间复杂度为 O(logn) 。

● 逆序对问题可以用“树状数组+离散化”实现,其核心原理是‌“通过离散化建立数值到位置的映射,再利用树状数组高效维护和查询这些位置上的计数信息,从而避免了直接的数值两两比较”。
(1)树状数组的作用‌:树状数组的每个位置代表离散化后的一个值(一个“桶”),记录每个数值出现的次数。通过查询前缀和,可以快速知道小于等于某个值的数有多少个。
(2)离散化的必要性‌:原始数据的数值范围很大,但实际不同的数值个数有限。离散化将大范围的数值映射到连续的整数下标,减少空间占用。

● 树状数组的概念、结构及实现:https://blog.csdn.net/hnjzsyjyj/article/details/149672973

● STL map 简介​:https://blog.csdn.net/hnjzsyjyj/article/details/146118701

【算法代码:数组 + sort + STL map

#include <bits/stdc++.h>
using namespace std;typedef long long LL;
const int maxn=1e6+5;
int a[maxn],c[maxn],t[maxn];
map<int,int> mp;
int n,cnt=1;int lowbit(int i) {return (-i)&i;
}void pointUpdate(int i,int val) {while(i<=n) {c[i]+=val;i+=lowbit(i);}
}LL preSum(int i) {LL s=0;while(i>0) {s+=c[i];i-=lowbit(i);}return s;
}int main() {cin>>n;for(int i=1; i<=n; i++) {cin>>a[i];t[i]=a[i];}sort(t+1,t+n+1);for(int i=1; i<=n; i++) { //discretizationif(mp.find(t[i])==mp.end()) {mp[t[i]]=cnt++;}}LL ans=0;for(int i=n; i>=1; i--) {ans+=preSum(mp[a[i]]-1);pointUpdate(mp[a[i]],1);}cout<<ans<<endl;return 0;
}/*
in:
10
88 71 16 2 72 38 94 50 72 67out:
21
*/




【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/149672973
https://blog.csdn.net/hnjzsyjyj/article/details/149002577
https://blog.csdn.net/hnjzsyjyj/article/details/148860296
https://blog.csdn.net/hnjzsyjyj/article/details/146118701








http://www.rkmt.cn/news/60348.html

相关文章:

  • 2025广州权威的留学机构排名榜
  • 2025广州权威的留学机构排名前十
  • Vue3快速笔记
  • 详细介绍:技术实践:在基于 RISC-V 的 ESP32 上运行 MQTT over QUIC
  • 2025广州有哪些办理出国留学机构
  • 2025北京留学中介机构名单
  • odoo12 跟踪所有的模型调用的onchange 方法
  • 对于高增量数据库的解决方案记录(暂时修改)
  • MySQL权限管理的坑你踩了没有?
  • 2025 年 11 月冷却塔厂家权威推荐榜:闭式冷却塔、方形冷却塔、工业冷却塔、全钢冷却塔、凉水塔、圆形冷却塔、玻璃钢冷却塔、防腐冷却塔、冷却水塔,高效散热与持久耐用的专业之选
  • 2025北京留学中介哪些机构好一点
  • k8s chain
  • 不丢帧、低延迟!图像采集卡的 5 步工作原理,看懂就是专家
  • 2025年服装整烫专用设备定做厂家权威推荐榜单:服装小型整烫设备/服装隧道整烫设备/仙桃服装整烫设备源头厂家精选
  • Spring Data JPA 最佳实践【1/2】:实体设计指南
  • 2025年11月呼叫中心系统品牌推荐评测报告:从稳定性到AI能力的解决方案剖析
  • 2025广州最大的留学中介是哪家
  • 2025北京申请留学机构哪家好
  • QQueue队列
  • 2025年11月数据标注平台推荐评测报告:从安全部署到智能辅助解决方案剖析
  • 2025年11月北京会计师事务所推荐:权威榜单与选择指南
  • 2025年远程高能点火器实力厂家权威推荐榜单:遥控高能点火器/防爆高能点火器/便携式高能点火器源头厂家精选
  • php Http请求 GET方式
  • plt.show()什么时候不用写?什么时候必须写?
  • Pyplot vs Seaborn 功能实现对比(直方图+箱线图) Pyplot → Seaborn 快速迁移指南
  • 2025年最新评价高的板材货架源头厂家找哪家,工业重型货架/手摇式板材货架/线棒流利货架/移动流利货架/重型滚轮式流利货架厂商推荐排行
  • AI元人文:构建价值共生的协契未来
  • 2025年11月上海审计事务所推荐榜单:主流机构对比与选择指南
  • 2025年11月上海审计事务所口碑推荐:用户评价与市场报告深度解析
  • 2025年11月高新技术企业认定公司推荐榜单与选择指南:权威解析与综合对比