现给出这个定义,什么是逆序对,NOIP火柴排队这个题是逆序对的一个比较好的例题,这里我们只讨论求逆序对的一些高效的算法

一般有归并排序以及树状数组两种方法,本文只讨论归并排序求逆序对

这里不给出原理只给出实现,注意下面这一句

                ans+=m-p;

把这句话加在归并排序的合并过程中即可,下面给出实现代码:

 1 #include<iostream>
 2 using namespace std;
 3 const int maxn=100005;
 4 int n;
 5 int a[maxn];
 6 long long ans=0;
 7 int t[maxn];
 8 void count(int* A,int x,int y)
 9 {
10     if(x+1<y)
11     {
12         int m=(x+y)/2;
13         count(A,x,m);
14         count(A,m,y);
15         int p=x,q=m;
16         int i=x;
17         while(p<m||q<y)
18         {
19             if(q>=y||(p<m&&A[p]<=A[q]))
20             t[i++]=A[p++];
21             else
22             {
23                 t[i++]=A[q++];
24                 ans+=m-p;
25             }
26         }
27               for(int i=x;i<y;i++) A[i]=t[i];
28     }
29 }
30 int main()
31 {
32     cin>>n;
33     for(int i=0;i<n;i++) cin>>a[i];
34     count(a,0,n);
35     cout<<ans<<endl;
36     return 0;
37 }

关于归并排序的代码实现原理以及求逆序对的原理将在后续补充。

转载于:https://www.cnblogs.com/aininot260/p/9305880.html

分治法:归并排序求逆序对相关推荐

  1. 信息竞赛进阶指南--归并排序求逆序对

    // 归并排序求逆序对 void merge(int l, int mid, int r) {// 合并a[l~mid]与a[mid+1~r]// a是待排序数组, b是临时数组, cnt是逆序对个数 ...

  2. 归并排序求逆序对(C语言)

    目录 1.归并排序过程 (1)逆序对概念 (2)基本思想 (3)算法实现 1.归并排序过程 使用归并排序实现求逆序对,那么首先得了解什么是归并排序(关于归并排序可以求逆序对,也是在做题中学会的). 首 ...

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

    题意: 给出一个数列,你要对这个数列的数字进行k次交换操作,使得交换之后的数列逆序对虽少. 思路: 求原数列的逆序对,再和k比就行了.求逆序对要用归并排序,因为树状数组开不下. 代码: #includ ...

  4. -9 逆序输出一个整数的各位数字_【每日算法】基础算法——归并排序[求逆序对的数量](四)(思想很经典)...

    题目内容 给定一个长度为n的整数数列,请你计算数列中的逆序对的数量. 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆 ...

  5. codeforces 414C C. Mashmokh and Reverse Operation(归并排序求逆序对)

    题目链接: C. Mashmokh and Reverse Operation time limit per test 4 seconds memory limit per test 512 mega ...

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

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

  7. 归并排序——求逆序对个数

    求解逆序对个数 逆序对 对于一个包含N个非负整数的数组A[1-n],如果有i < j,且A[ i ]>A[ j ],则称(A[ i] ,A[ j] )为数组A中的一个逆序对. 例如,数组( ...

  8. 【NOI导刊】【归并排序求逆序对】最接近神的人

    题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着"神的殿堂".小FF猜 ...

  9. 逆序对算法c语言,归并排序求逆序对的代码(C语言)

    #include #include #define MAX 32767 int merge(int *array, int p,int q,int r) { //归并array[p...q] 与 ar ...

最新文章

  1. Docker 服务终端 UI 管理工具
  2. php使用es搜索引擎,分布式搜索引擎Elasticsearch PHP类封装 使用原生api
  3. SilverlightMVVM模式中的数据校验
  4. scrapy之内蒙古自治区环境保护厅
  5. 【es】 check-rollover-ready read index [alinas-lcc] is not the wtiter index for alians [index-xx]
  6. 首富带你畅谈:蓝绿部署、滚动发布、灰度发布/金丝雀发布
  7. 全网最全ADB命令,没有之一
  8. 腾讯公司执行董事 董事会主席兼本公司首席执行官 马化腾
  9. java线程状态切换图
  10. python两种方法求ROC曲线下面积(AUC)
  11. [NOIP2012模拟10.25] 剪草 [贪心+dp]
  12. Bootstrap实战(第一弹:栅格实现5等分或8等分)
  13. HTML5和CSS3 API文档分享
  14. 如何在word、pdf、ppt中导入字体
  15. SpringBoot:Whitelabel Error Page 404
  16. Python Flask Web教程002:Flask 快速上手
  17. 血泪!pyinstaller打包文件过大的解决方法
  18. The installer has encountered an unexpected error installing this package.this may indicate a proble
  19. msfconsole之制作windows木马并成功获取shell
  20. SV--线程(mailbox)

热门文章

  1. HDFS存储架构剖析
  2. Android Studio3.x填坑路
  3. 在Ubuntu X64上编译Hadoop
  4. Eclipse EGit插件安装使用记录
  5. leetcode:Excel Sheet Column Number
  6. H3C S1526交换机端口镜像配置
  7. 【莓控】黑莓GOOGLE MAPS(GPS软件)-转贴
  8. 某银行软件中心产品开发流程
  9. java socket 丢字节_Java:socket消息丢失了
  10. tpcc-mysql percona_tpcc-mysql 对percona5.6进行压力测试