problem

  • 多组数据,每组给你一个长为n的序列
  • 求该序列的逆序对个数

solution

  • 对于 i < j 且 a[i] > a[j],称a[i]与a[j]构成逆序对。
  • 归并合并比较时,对于两个指针i,j :如果a[j] < a[i],那么a[i~mid]都比a[j]要大,他们都会与a[j]构成逆序对,将他们加入答案即可。

codes

#include<iostream>
using namespace std;
const int maxn = 500010;
int a[maxn]; long long ans = 0;
void MergeSort(int l, int r){if(l >= r)return ;int m = l+r>>1;MergeSort(l,m);MergeSort(m+1,r);int i = l, j = m+1;int t[r-l+1], k = 0;while(i<=m && j<=r){if(a[i]<=a[j])t[k++]=a[i++];else{t[k++] = a[j++];ans += m-i+1;//加上剩余元素个数}}while(i<=m)t[k++]=a[i++];while(j<=r)t[k++]=a[j++];for(i=l, k=0; i <= r; i++,k++)a[i]=t[k];
}
int main(){int n;while(cin>>n &&n){ans = 0;for(int i = 1; i <= n; i++)cin>>a[i];MergeSort(1,n);cout<<ans<<"\n";}return 0;
}

【POJ2299】Ultra-QuickSort(逆序对,归并排序)相关推荐

  1. [剑指offer][JAVA]面试题[51][数组中的逆序对][归并排序]

    [问题描述]面试题51.数组中的逆序对 (困难) 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 示例 1:输入: [7, ...

  2. [洛谷P1908] 逆序对|归并排序|树状数组

     题目描述 Description 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计.最近,TOM老猫查阅到一个人类称之为&qu ...

  3. 数组中的逆序对-------归并排序应用

    题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%100 ...

  4. 【逆序对】Ultra - Quicksort

    POJ 2299 Ultra-QuickSort 只允许交换,比较相邻的元素, 求最少多少次交换可以使得序列有序 冒泡排序的次数-->数列中逆序对的个数减1-->最终为0 -->答案 ...

  5. POJ-排序-归并排序与逆序对

    排序:归并排序与逆序对 一.概念 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序 ...

  6. 利用归并排序求逆序对

    在逆序对的问题中,如果采用暴力求解的方法,一般也是有效的,但是O(n2)时间复杂度实在是难以接受的.但是对于逆序对问题,却有一个看似不想关的算法来解决–归并排序.时间复杂度和空间复杂度完全与归并排序一 ...

  7. 【hihocoder】三十九周:二分.归并排序之逆序对

    就是用归并排序求数组中得逆序对.假设数组为a:[2 4 5],和b:[1 3],那么在这一次归并的时候逆序对这样求,belement表示当前result数组中b数组对应的元素个数,total表示逆序对 ...

  8. 泛 归并排序 及 逆序对

    今天写一个归并排序的模板,返回值为该序列的逆序对数 基本思路 归并排序就是利用二分的思想,将区间无限递归二分,直到当前划分区间只包含一个元素或没有元素的时候(我们认为这个序列是自动有序的),我们回溯到 ...

  9. python 归并排序,合并有序数组,逆序对个数

    归并排序,合并有序列表,求逆序对个数 之所以将标题中三者放一起是因为它们有密不可分的关系. 合并有序列表 定义一个空列表 li 用来存放排序后的值; 定义两个 cursor lc 和 rc,分别指向左 ...

最新文章

  1. 【算法】 - 滑动窗口
  2. CreateThread、_beginthread与AfxBeginThread的区别及其注意事项
  3. 2018ACM上海大都会赛: I. Matrix Game(最小费用最大流)
  4. BOMRemover v2.0 去除代码中的UTF-8 BOM
  5. Github hosts修改
  6. Go 开发关键技术指南 | 带着服务器编程金刚经走进 2020 年(内含超全知识大图)
  7. 如何在你朋友面前伪装黑客7(程序代码)
  8. 计算机金融学校排名2015,金融学院2015级各专业排名情况统计表
  9. 关于声音的前后左右上下的控制以及单声道立体声的区别
  10. 什么样男人必出轨 震惊!出轨男子名字中居然都有这字
  11. “无法连接到打印机。您输入的打印机名不正确 或者指定的打印机没有连接到服务器上”终极解决方法
  12. server 服务器文档,服务器文档,server document,音标,读音,翻译,英文例句,英语词典...
  13. 第一个工作单位的那些事
  14. 《西西弗神话》读后感
  15. 分享一些我的创业心得
  16. MySQL字段类型VARCHAR
  17. iPhone回收中这样看划痕就不会被压价了
  18. spss clementine安装
  19. 《疯狂Android讲义》学习笔记 -- 手势(Gesture)
  20. dcdc模块降额设计_DC-DC电源模块选型

热门文章

  1. 辨异 —— 数学基本概念
  2. 计算机的组成 —— 存储(内存/硬盘)
  3. 绘图神器 —— Graphviz 绘制数据结构相关图形
  4. 阶乘与 pi 的关系 —— 斯特林公式(Stirling formula)
  5. C++基础::STL中的定理
  6. python编程100例-python100例,python经典例题
  7. python入门代码大全-python入门代码指南教程书籍推荐2020总结全集汇总
  8. python编程语言-为什么我不建议你将python作为入门编程语言
  9. python必背入门代码-初学Python必背手册
  10. p语言是python吗-Python 这语言真是混乱和原始