我用的线段树写的。

num数组表示已插入的数值的个数。

由于a[i]数值很大,但是n不是很大,所以要离散化处理

9 1 0 5 4

离散化后

4 1 0 3 2

这样保证最大值不会超过n

  1. #include <iostream>
  2. #include <string>
  3. #include <cstdio>
  4. #include <algorithm>
  5. #include <cstring>
  6. #define lson l, m, rt<<1
  7. #define rson m+1, r, rt<<1|1
  8. using namespace std;
  9.  
  10. typedef long long ll;
  11. const int MAXN = 543210;
  12. int a[MAXN], mp[MAXN], num[MAXN<<2];
  13.  
  14. void push_up(int rt)
  15. {
  16. num[rt] = num[rt<<1] + num[rt<<1|1];
  17. }
  18.  
  19. void update(int p, int l, int r, int rt)
  20. {
  21. if(l == r)
  22. {
  23. num[rt]++;
  24. return;
  25. }
  26. int m = (l + r) >> 1;
  27. if(p <= m) update(p, lson);
  28. else update(p, rson);
  29. push_up(rt);
  30. }
  31.  
  32. int query(int L, int R, int l, int r, int rt)
  33. {
  34. if(L <= l && r <= R) return num[rt];
  35. int m = (l + r) >> 1;
  36. int ret = 0;
  37. if(L <= m) ret += query(L, R, lson);
  38. if(R > m) ret += query(L, R, rson);
  39. return ret;
  40. }
  41.  
  42. bool cmp(int A, int B)
  43. {
  44. return a[A] < a[B];
  45. }
  46.  
  47. int main()
  48. {
  49. // freopen("in.txt", "r" ,stdin);
  50. int n;
  51. while(~scanf("%d", &n) && n)
  52. {
  53. for(int i=0; i<n; i++)
  54. {
  55. scanf("%d", &a[i]);
  56. mp[i] = i;
  57. }
  58. //离散化,排序后处理
  59. sort(mp, mp+n, cmp); //离散化排序
  60. for(int i=0; i<n; i++)
  61. a[mp[i]] = i; //离散化处理
  62. ll ans = 0;
  63. memset(num, 0, sizeof(num));
  64. for(int i=0; i<n; i++)
  65. {
  66. ans += query(a[i], n-1, 0, n-1, 1);
  67. update(a[i], 0, n-1, 1);
  68. }
  69. printf("%I64d\n", ans);
  70. }
  71. return 0;
  72. }

POJ 2299 Ultra-QuickSort 求逆序数 线段树或树状数组 离散化的更多相关文章

  1. poj 2299 Ultra-QuickSort (归并排序 求逆序数)

    题目:http://poj.org/problem?id=2299 这个题目实际就是求逆序数,注意 long long 上白书上的模板 #include <iostream> #inclu ...

  2. poj 2299 Ultra-QuickSort 归并排序求逆序数对

    题目链接: http://poj.org/problem?id=2299 题目描述: 给一个有n(n<=500000)个数的杂乱序列,问:如果用冒泡排序,把这n个数排成升序,需要交换几次? 解题 ...

  3. POJ 2299 Ultra-QuickSort 求逆序数 (归并或者数状数组)此题为树状数组入门题!!!

    Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 70674   Accepted: 26538 ...

  4. Poj 2299 Ultra-QuickSort(归并排序求逆序数)

    一.题意 给定数组,求交换几次相邻元素能是数组有序. 二.题解 刚开始以为是水题,心想这不就是简单的冒泡排序么.但是毫无疑问地超时了,因为题目中n<500000,而冒泡排序总的平均时间复杂度为, ...

  5. poj 2299 Ultra-QuickSort(求逆序对)

    Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 52778   Accepted: 19348 ...

  6. POJ训练计划2299_Ultra-QuickSort(归并排序求逆序数)

    Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 39279   Accepted: 14163 ...

  7. 求逆序数的方法--线段树法&归并排序法

    逆序数的概念:对于n个不同的元素,先规定各元素之间有一个标准次序(例如n个 不同的自然数,可规定从小到大为标准次序),于是在这n个元素的任一排列中,当某两个元素的先后次序与标准次序不同时,就说有1个逆 ...

  8. poj 3067 Japan(树状数组求逆序数)

    链接:http://poj.org/problem?id=3067 题意:左边有n个城市,右边有m个城市,建k条道路,问有这k条道路中有多少个交点. 分析:将城市按x和y从小到大排序,对于每条道路,求 ...

  9. POJ 2299 【树状数组 离散化】

    题目链接:POJ 2299 Ultra-QuickSort Description In this problem, you have to analyze a particular sorting ...

随机推荐

  1. 在/etc/profile下配置java的环境变量

    在/etc/profile下配置java的环境变量 原创 Java 作者:xiaoyan5686670 时间:2016-01-18 14:30:28  6152  0 以root用户编辑:#vi /e ...

  2. HAProxy之三----keepalived配合脚本对HAProxy、ping网关实现高可用检测

    调用脚本参数含义 vrrp_script<SCRIPT_NAME> { #定义一个检测脚本,在global_defs之外配置 script <STRING>|<QUOTE ...

  3. Java核心技术卷阅读随笔--第3章【Java 的基本程序设计结构】

    Java 的基本程序设计结构 现在, 假定已经成功地安装了 JDK,并且能够运行第 2 章中给出的示例程序.我们从现在开始将介绍 Java 应用程序设计.本章主要介绍程序设计的基本概念(如数据类型.分 ...

  4. 解决latex数学公式渲染不正确及行内公式中文渲染乱码问题

    问题 之前数学OCR渲染数学公式用的 katex 来渲染,前端解决方案,我们的进行公式编写的时候是需要输入中文的,如: Fe_{2}O_{3} + 3 C O \stackrel{高温}{=} 2 F ...

  5. githubssh配置

  6. Go基础结构与类型03---标准输入与输出

    package main import ( "fmt" "strconv" ) //每次接收一个用户输入 func main031() { //定义a, b两个 ...

  7. 稀疏性如何为AI推理增加难度

    稀疏性如何为AI推理增加难度 NVIDIA Ampere架构使数学运算加倍,以加速对各种神经网络的处理. 如果曾经玩过游戏Jenga,那么将有一些AI稀疏感. 玩家将木制积木交叉成一列.然后,每个玩家 ...

  8. NVIDIA GPU卷积网络的自动调谐

    NVIDIA GPU卷积网络的自动调谐 针对特定设备和工作负载的自动调整对于获得最佳性能至关重要.这是关于如何为NVIDIA GPU调整整个卷积网络. NVIDIA GPU在TVM中的操作实现是以模板 ...

  9. 孟老板 BaseAdapter封装 (一) 简单封装

    BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...

  10. csp-s模拟测试49(9.22)养花(分块/主席树)·折射(神仙DP)·画作

    最近有点头晕........... T1 养花 考场我没想到正解,后来打的主席树,对于每个摸数查找1-(k-1),k-(2k-1)...的最大值,事实上还是很容易被卡的但是没有数据好像还比较友善, 对 ...