尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

AcWing 788:逆序对的数量 ← 树状数组 + 离散化(数组 + sort + STL map)
📅 发布时间:2026/6/20 18:10:48

​【题目来源】
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








相关新闻

  • 2025广州权威的留学机构排名榜
  • 2025广州权威的留学机构排名前十
  • Vue3快速笔记

最新新闻

  • GDB基础命令
  • 2026上海翡翠回收避坑指南|看懂行情价,拒绝虚高报价套路 - 奢侈品交易观察员
  • ahk2_lib架构解密:构建企业级AutoHotkey V2原生扩展生态
  • 3分钟免费汉化Axure:告别英文界面,拥抱高效中文设计体验
  • 论文AI写作网址有哪些?精选6款正规平台推荐 - 掌桥科研-AI论文写作
  • 2026武汉三新高级技工学校招生简章,23个热门专业覆盖理工、艺术、医学、教育等六个学科方向 - 资讯速览

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号