1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int n;
  4. long long a[],b[],ans;//a为待排序数组,b为临时数组,ans为逆序对数
  5. void mergesort(int l,int r)//l为左边界,r为右边界
  6. {
  7. if(l==r) return;
  8. int mid=(l+r)>>;
  9. mergesort(l,mid);
  10. mergesort(mid+,r);
  11. int i=l,j=mid+,k=l;
  12. while(i<=mid&&j<=r)
  13. {
  14. if(a[i]<=a[j]) b[k++]=a[i++]; //注意等号 若a[i]==a[j] 则不构成逆序对
  15. else b[k++]=a[j++],ans+=mid-i+;//求逆序对
  16. }
  17. while(i<=mid) b[k++]=a[i++];
  18. while(j<=r) b[k++]=a[j++];
  19. for(int i=l;i<=r;i++) a[i]=b[i];
  20. }
  21. int main()
  22. {
  23. scanf("%d",&n);
  24. while(n)
  25. {
  26. ans=;
  27. memset(a,,sizeof(a));
  28. memset(b,,sizeof(b));
  29. for(int i=;i<=n;i++) scanf("%d",&a[i]);
  30. mergesort(,n);
  31. printf("%lld\n",ans);
  32. scanf("%d",&n);
  33. }
  34. return ;
  35. }

逆序对(POJ2299 Ultra-QuickSort)的更多相关文章

  1. POJ-2299 Ultra-QuickSort---树状数组求逆序对+离散化

    题目链接: https://vjudge.net/problem/POJ-2299 题目大意: 本题要求对于给定的无序数组,求出经过最少多少次相邻元素的交换之后,可以使数组从小到大有序. 两个数(a, ...

  2. 用归并排序或树状数组求逆序对数量 poj2299

    题目链接:https://vjudge.net/problem/POJ-2299 推荐讲解树状数组的博客:https://blog.csdn.net/int64ago/article/details/ ...

  3. poj2299(归并排序求逆序对)

    题目链接:https://vjudge.net/problem/POJ-2299 题意:给定一个序列,每次只能交换邻近的两个元素,问要交换多少次才能使序列按升序排列. 思路:本质就是求逆序对.我们用归 ...

  4. poj2299树状数组入门,求逆序对

    今天入门了树状数组 习题链接 https://blog.csdn.net/liuqiyao_01/article/details/26963913 离散化数据:用一个数组来记录每个值在数列中的排名,不 ...

  5. POJ2299逆序对模板(树状数组)

    题目:http://poj.org/problem?id=2299 只能相邻两个交换,所以交换一次只会减少一个逆序对.所以交换次数就是逆序对数. ps:原来树状数组还可以记录后边lowbit位的部分和 ...

  6. poj2299 Ultra-QuickSort(线段树求逆序对)

    Description In this problem, you have to analyze a particular sorting algorithm. The algorithm proce ...

  7. poj2299——逆序对

    题目:http://poj.org/problem?id=2299 逆序对,注意树状数组维护后缀和. 代码如下: #include<iostream> #include<cstdio ...

  8. Poj2299 Ultra-QuickSort(另附本质不同逆序对)

    Description 给定一个长度为 n(n≤5*10^5) 的序列 a,如果只允许进行比较和交换相邻两个数的操作求至少需要多少次交换才能把 a 从小到大排序. Input The input co ...

  9. POJ 2299树状数组求逆序对

    求逆序对最常用的方法就是树状数组了,确实,树状数组是非常优秀的一种算法.在做POJ2299时,接触到了这个算法,理解起来还是有一定难度的,那么下面我就总结一下思路: 首先:因为题目中a[i]可以到99 ...

随机推荐

  1. 工控安全入门(二)—— S7comm协议

    在上一次的文章中我们介绍了施耐德公司的协议modbus,这次我们把目标转向私有协议,来看看另一家巨头西门子的S7comm.首先要说明,这篇文章中的内容有笔者自己的探索,有大佬们的成果,但由于S7com ...

  2. ajax实例解析

    function showHint(str) { var xmlhttp; if (str.length==0) { document.getElementById("txtHint&quo ...

  3. Vue. 之 Element table 单元格内容隐藏

    Vue. 之 Element table 单元格内容隐藏 在table显示数据时,若某个单元格的内容过多,需要进行隐层,在这一列的单元格属性添加::show-overflow-tooltip=&quo ...

  4. Chrome谷歌浏览器调试

    Chrome浏览器调试技巧  https://blog.csdn.net/u014727260/article/details/53231298

  5. python实例 字符串

    比起C/C++,Python处理字符串的方式实在太让人感动了.把字符串当列表来用吧. #! /usr/bin/python word="abcdefg" a=word[2] pri ...

  6. Leetcode54. Spiral Matrix螺旋矩阵

    给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ...

  7. Hadoop 无法启动的问题

    最近乱搞把本来就快要挂了的hdfs又给弄坏了.问题如下, 应该是节点没有启动. [hadoop@namenode hadoop]$ hadoop dfsadmin -report Configured ...

  8. Python2.7用sys.stdout.write实现打印刷新

    如何能在控制台实现在一行中显示进度的信息呢,就像使用pip安装时的进度那样. 如果用print则会打印成多行,下面这个小技巧可以在一行中打印: import time import sys if __ ...

  9. JavaScript--事件委托--冒泡

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Core Data Migration 之拆分Entity

    参考文章:http://blog.slalom.com/2010/01/08/splitting-an-entity-in-a-coredata-migration/ 最近自己做的背单词软件,在之前的 ...