当前位置: 首页 > 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.jsqmd.com/news/50482/

相关文章:

  • AI 数据分析如何保障准确性?Aloudata Agent 构建可信数据基础
  • MWD脉冲器电路关键技术与挑战
  • 2025年广东早恋教育机构权威推荐榜单:素质教育/打架/厌学源头机构精选
  • tignerVNC
  • 麒麟系统V10SP1更新到指定内核方法
  • 深入解析:英集芯 IP5326 集成Type-C协议的2.4A充放电移动电源SOC
  • 视频汇聚平台EasyCVR打造阳光药房远程可视化智慧监管体系
  • 2025厦门口碑好的留学中介有哪些
  • 2025年河北大口径胶管权威推荐榜单:河北大口径抽沙胶管/河北大口径吸沙胶管/河北喷砂吸排法兰胶管源头厂家精选
  • 2025广州权威的留学机构排名榜
  • DeerFlow源码分析
  • 2025北京留学机构前十名有哪些
  • 2025年北京回收二手红木家具公司权威推荐榜单:回收红木家具高价/回收阔叶黄檀家具/回收缅甸花梨家具源头公司精选
  • 2025澳大利亚研究生留学中介哪个好
  • 视频融合平台EasyCVR助力城市渣土车管理,打造智能联网监控方案
  • 服务器远程连接不上怎么回事?怎么解决?
  • 多位
  • CF1458C Latin Square
  • 2025年湖北阴囊湿疹怎么治疗护理权威推荐榜单:湖北附睾结核怎么治疗/湖北脓尿怎么治疗/湖北肾盂肾炎怎么治疗综合医院特色门诊精选
  • 2025广州权威的留学机构排名前十
  • 2025北京留学机构一览表最新
  • 这些奇怪的JavaScript隐式转换你一定遇到过!
  • 2025澳大利亚留学中介排行
  • 大象《Thinking in Projects》读书笔记3
  • 2025年高层建筑物平移源头厂家权威推荐榜单:房屋整体平移/建筑物平移/别墅平移源头厂家精选
  • 三分钟带你了解什么是 Headless UI (含demo)
  • PDF超级助手软件下载安装教程_免费PDF编辑工具使用指南
  • Vue3快速笔记
  • 详细介绍:技术实践:在基于 RISC-V 的 ESP32 上运行 MQTT over QUIC
  • python-IPO模型