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

洛谷 P1908:逆序对 ← 树状数组 + 离散化(数组 + sort + STL map)

【题目来源】
https://www.luogu.com.cn/problem/P1908

【题目描述】
猫猫 TOM 和小老鼠 JERRY 最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计。
最近,TOM 老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定义的:对于给定的一段正整数序列,逆序对就是序列中 ai>aj 且 i<j 的有序对。知道这概念后,他们就比赛谁先算出给定的一段正整数序列中逆序对的数目。注意序列中可能有重复数字。

【输入格式】
第一行,一个数 n,表示序列中有 n 个数。
第二行 n 个数,表示给定的序列。序列中每个数字不超过 10^9。

【输出格式】
输出序列中逆序对的数目。

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

【输出样例】
11

【说明/提示】
对于 25% 的数据,n≤2500。
对于 50% 的数据,n≤4×10^4。
对于所有数据,n≤5×10^5。
请使用较快的输入输出。

【算法分析】
● 本题数据个数上限为 5e5,但数据范围至 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

【算法代码】

#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:
6
5 4 2 6 3 1out:
11
*/





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




 

http://www.gsyq.cn/news/60672.html

相关文章:

  • P10977 Cut the Sequence 分析
  • 软件工程学习日志2025.11.25
  • IT外包与勒索软件:英国经济安全面临的技术风险
  • NumPy广播机制深度解析:为什么有时能加,有时报错?
  • STL常用功能
  • Rust 零拷贝技术:从所有权到专业的系统调用的性能优化之道
  • 2025年下半年奖牌/水晶奖杯/奖杯定制/定制厂家口碑推荐榜
  • 低代码平台选型指南:企业避坑指南与核心评估维度
  • IMX6D的LVDS调试
  • 题解:CF1746D Paths on the Tree
  • 解决Windows窗口在屏幕外的问题
  • ai论文工具推荐:助力学术创作效率提升的实用工具
  • 2025年国际发表必备!多语言AI论文写作工具TOP 3 深度测评
  • 外观检测设备有哪些?制造业主流方案及应用解析
  • 光学膜外观缺陷检测设备:技术创新与行业应用动态
  • 睡眠不好吃的益生菌选哪家好?热门产品解析
  • 热力图数据可视化,调研
  • 元聚变科技集团估值:AI与数据要素驱动的企业价值解析
  • 有助于睡眠的益生菌推荐几款,这些口碑品牌值得关注
  • 苏州刑事律所推荐:如何选择专业可靠的法律服务机构
  • 上海值得投资的AI企业:聚焦技术创新与产业赋能潜力
  • 上海有哪些AI企业值得投资?行业潜力机构盘点
  • 2025 年成都蜂窝铝扣板生产厂家口碑推荐榜出炉
  • 2025年行业内四川噪声治理厂家口碑最好的厂家榜
  • 2025年11月山东石材雕刻机/墓碑雕刻机/绳锯机综合测评TOP10
  • 2025 卫浴健康革命!全链路杀菌马桶榜单,99% 家庭都需要
  • 2025年质量好的西安净化板实力厂家推荐排行榜
  • 2025年盐雾试验箱厂家口碑评分排行榜,淋雨试验箱/恒温恒湿试验箱/恒温恒湿房/光伏组件湿演式验箱/高低温试验箱盐雾试验箱厂商推荐排行
  • 中国私有云格局2025:Top 5 Private Cloud Providers Hybrid Cloud Trends
  • 【中山大学主办,IEEE出版】第五届通信技术与信息科技国际学术会议(ICCTIT 2025)