逆序对在编程中比较常见,最普通的O(n ^ 2)算法很短,但是太慢了,往往不满足我们的要求。一种高级的O(nlogn)的算法是使用归并排序,在归并排序执行过程中解决问题,时间是短,但是代码量太大了。现在,我们有一种算法,时间短,代码量也少,很好记,就是用树状数组来实现。

int n, c[MAXN], number[MAXN];
struct Node { int val, num; } a[MAXN];
bool cmp(Node a, Node b) { return a.val > b.val; }
int lowbit(int x) { return x & (-x); }
void add(int x)
{for (int i = x;i <= n;i += lowbit(i)) c[i]++;
}
int query(int x)
{int ans = 0;for (int i = x;i > 0;i -= lowbit(i)) ans += c[i];return ans;
}
int reverse_order_pair()
{int ans = 0, temp = -1, tot = 0;stable_sort(a + 1, a + n + 1, cmp);  for (int i = 1; i <= n; i++)  {  if (a[i].val != temp)  {  tot++;  temp = a[i].val;  }  number[a[i].num] = tot;  }  for (int i = 1; i <= n; i++)  {  add(number[i]);  ans += query(number[i] - 1);  }  return ans;
}

revers_order_pair是求解逆序对的函数,compare是为了使用sort,add和query应该都看得懂,毕竟是树状数组经典操作。实现过程就画个图就解决了。

【模板】逆序对(树状数组)相关推荐

  1. 【2018.12.15】【考试总结】【模拟+逆序对+树状数组+贪心+multiset】爆零之旅

    这是我悲惨的接近爆零的一次考试,但是本蒟蒻不能放弃,还是要总结的QAQ 答题卡 [题目背景] 八月是个悲惨的月份.先不谈炎热的天气,对于新生来说,八月意味着军训: 而对于高二高三的同学来说,八月意味着 ...

  2. P2717-寒假作业【逆序对,树状数组】

    正题 题目链接:https://www.luogu.com.cn/problem/P2717 题目大意 nnn个数,求有多少个连续子序列的平均值大于等于kkk. 解题思路 因为长度会十分干扰,所以我们 ...

  3. P3531-[POI2012]LIT-Letters【逆序对,树状数组】

    正题 题目大意:https://www.luogu.org/problem/P3531 题目大意 两个由相同字符组成的字符串,每次可以交换相邻的两个字符,求最少交换次数使这两个字符串相同. 解题思路 ...

  4. 【模板】一维树状数组

    ACM模板 目录 聊聊前缀和 什么是树状数组? 树状数组相关操作 局限性 差分在树状数组中的应用 区间更新.单点查询 区间更新.区间查询 树状数组应用 聊聊前缀和 比如数组 int a[7]={1,2 ...

  5. 模板三连击:树状数组+线段树+主席树

    没事儿干,复习模板...... 1.树状数组 本来不想写这个的,但是反正就几分钟就打完了,所以就写了,水AC数. 洛谷 P3374 [模板]树状数组 1 1 #include<cstdio> ...

  6. 【模板篇】树状数组们(三)

    UPD: 本篇有了一个更通(hui)俗(se)易(nan)懂的讲解, 大家可以移步这里围观~(使用了latex推柿子, 带给你不一样的清新体验~ ok,以上两期稍稍讲了一下树状数组的基本功能.. 最最 ...

  7. A Simple Problem with Integers POJ - 3468(线段树+区间查询+区间修改+建树+懒惰标记模板)+(树状数组)

    题意: 有一个数组,有两种操作.1: Q a b 求[a,b]的和 2:C a b c 给[a,b] 的所有元素都加上c. 题目: You have N integers, A1, A2, ... , ...

  8. 树状数组的相关知识 及 求逆序对的运用

    文章目录 树状数组概念 前缀和和区间和 树状数组原理 区间和--单点更新 前缀和--区间查询 完整代码 离散化 sort函数 unique函数去重 erase函数仅保留不重复元素 通过树状数组求逆序对 ...

  9. 0x42.数据结构进阶 - 树状数组

    目录 一.树状数组与逆序对 A.luogu P1908 逆序对(模板题) B.AcWing 241. 楼兰图腾 树状数组的拓展应用 1.区间加,求单点值 A.AcWing 242. 一个简单的整数问题 ...

  10. 【数据结构2-2】线段树与树状数组 题解

    头一次老老实实写完一个官方题单,发篇题解纪念一下-- 文章目录 P3372 [模板]线段树 1 P3373 [模板]线段树 2 P4588 [TJOI2018]数学计算 P1502 窗口的星星 P24 ...

最新文章

  1. 100+Python编程题给你练~(附答案)
  2. RDC Hydrogen
  3. Linux实战教学笔记02:计算机系统硬件核心知识
  4. eclipse中常见快捷键
  5. Mysql全文索引解析
  6. 雅虎十四条:网站前端网页优化的14条原则
  7. 【转】通过VIOS实现AIX系统的网络虚拟化
  8. 【2016】【论文笔记】差频可调谐THz技术——
  9. java jstl 配置_jstl的tld配置
  10. 学习日记--overflow去掉滑条
  11. python惰性求值例子_惰性求值和yield-Python
  12. 我发现一个地方能免费领取价值198元的手环,具有能量并且有高人加持过的,只要关注微信就可以免费领取
  13. 苹果手机投影_智能投影机和手机无线同屏
  14. 用glRotatef函数转动对象
  15. 微型计算机的总线分为哪些,计算机总线的分类
  16. C语言采药动态规划,动态规划_POJ1775:采药
  17. Yolov5可以看到虽然有结果图片,但是并没有框出识别结果
  18. HTML5网页设计练习-选择器的应用
  19. HTML与CSS关系
  20. ELK--- ELK简介

热门文章

  1. poweroff命令
  2. Spring Boot 微服务编码风格指南和最佳实践
  3. 笔记本电脑系统及驱动安装小记(私用勿参考)
  4. Swagger文档详解
  5. 基因共表达网络分析java,RNA-seq数据的基因共表达网络分析
  6. Java中Date类和Calender类的比较_IT168文库
  7. IDEA翻译插件 不需要应用id和密钥
  8. 配置管理小报100406:如何创建易用的Outlook电子邮件模板
  9. 磁盘空间不足怎么办,如何处理分配磁盘的空间?
  10. 【uniapp】给图片添加水印