分治法:归并排序求逆序对
现给出这个定义,什么是逆序对,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
分治法:归并排序求逆序对相关推荐
- 信息竞赛进阶指南--归并排序求逆序对
// 归并排序求逆序对 void merge(int l, int mid, int r) {// 合并a[l~mid]与a[mid+1~r]// a是待排序数组, b是临时数组, cnt是逆序对个数 ...
- 归并排序求逆序对(C语言)
目录 1.归并排序过程 (1)逆序对概念 (2)基本思想 (3)算法实现 1.归并排序过程 使用归并排序实现求逆序对,那么首先得了解什么是归并排序(关于归并排序可以求逆序对,也是在做题中学会的). 首 ...
- hust1347(归并排序求逆序对)
题意: 给出一个数列,你要对这个数列的数字进行k次交换操作,使得交换之后的数列逆序对虽少. 思路: 求原数列的逆序对,再和k比就行了.求逆序对要用归并排序,因为树状数组开不下. 代码: #includ ...
- -9 逆序输出一个整数的各位数字_【每日算法】基础算法——归并排序[求逆序对的数量](四)(思想很经典)...
题目内容 给定一个长度为n的整数数列,请你计算数列中的逆序对的数量. 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆 ...
- codeforces 414C C. Mashmokh and Reverse Operation(归并排序求逆序对)
题目链接: C. Mashmokh and Reverse Operation time limit per test 4 seconds memory limit per test 512 mega ...
- 利用归并排序求逆序对
在逆序对的问题中,如果采用暴力求解的方法,一般也是有效的,但是O(n2)时间复杂度实在是难以接受的.但是对于逆序对问题,却有一个看似不想关的算法来解决–归并排序.时间复杂度和空间复杂度完全与归并排序一 ...
- 归并排序——求逆序对个数
求解逆序对个数 逆序对 对于一个包含N个非负整数的数组A[1-n],如果有i < j,且A[ i ]>A[ j ],则称(A[ i] ,A[ j] )为数组A中的一个逆序对. 例如,数组( ...
- 【NOI导刊】【归并排序求逆序对】最接近神的人
题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着"神的殿堂".小FF猜 ...
- 逆序对算法c语言,归并排序求逆序对的代码(C语言)
#include #include #define MAX 32767 int merge(int *array, int p,int q,int r) { //归并array[p...q] 与 ar ...
最新文章
- Docker 服务终端 UI 管理工具
- php使用es搜索引擎,分布式搜索引擎Elasticsearch PHP类封装 使用原生api
- SilverlightMVVM模式中的数据校验
- scrapy之内蒙古自治区环境保护厅
- 【es】 check-rollover-ready read index [alinas-lcc] is not the wtiter index for alians [index-xx]
- 首富带你畅谈:蓝绿部署、滚动发布、灰度发布/金丝雀发布
- 全网最全ADB命令,没有之一
- 腾讯公司执行董事 董事会主席兼本公司首席执行官 马化腾
- java线程状态切换图
- python两种方法求ROC曲线下面积(AUC)
- [NOIP2012模拟10.25] 剪草 [贪心+dp]
- Bootstrap实战(第一弹:栅格实现5等分或8等分)
- HTML5和CSS3 API文档分享
- 如何在word、pdf、ppt中导入字体
- SpringBoot:Whitelabel Error Page 404
- Python Flask Web教程002:Flask 快速上手
- 血泪!pyinstaller打包文件过大的解决方法
- The installer has encountered an unexpected error installing this package.this may indicate a proble
- msfconsole之制作windows木马并成功获取shell
- SV--线程(mailbox)