逆序数的求法总结(归并、线段树、树状数组、离散化)
2015-12-05 14:56
381 查看
1、归并排序求逆序数
http://acm.nyist.net/JudgeOnline/problem.php?pid=117
在归并排序的过程中,比较关键的是通过递归,将两个已经排好序的数组合并,此时,若a[i] > a[j],则i到m之间的数都大于a[j],合并时a[j]插到了a[i]之前,此时也就产生的m-i+1个逆序数,而小于等于的情况并不会产生。
View Code
http://acm.nyist.net/JudgeOnline/problem.php?pid=117
在归并排序的过程中,比较关键的是通过递归,将两个已经排好序的数组合并,此时,若a[i] > a[j],则i到m之间的数都大于a[j],合并时a[j]插到了a[i]之前,此时也就产生的m-i+1个逆序数,而小于等于的情况并不会产生。
#include<stdio.h> #include<algorithm> using namespace std; struct node{ int v; int index; }; node a[100]; int aa[100];//离散化后的数组 int n; bool cmp(node a,node b){ return a.v < b.v; } int main(){ scanf("%d",&n); for(int i = 1;i<=n;i++){ scanf("%d",&a[i].v); a[i].index = i; } sort(a+1,a+1+n,cmp); for(int i = 0;i<=n;i++) aa[a[i].index] = i; return 0; }
View Code
相关文章推荐
- 最大似然估计与最大后验概率估计
- Solr导入MySql中的数据
- Android 高仿 QQ5.0 侧滑菜单效果 自定义控件来袭
- nginx 源码学习笔记(十)——基本容器——ngx_hash
- 162.Oracle数据库SQL开发之 SQL优化——优化器传递提示
- Ubuntu VirtualBox 命令行安装
- Python——参数(2)
- 编程成长日记――求一个数的二进制
- 设计模式总结(一)
- Lenovo笔记本各类型触控板,触摸部分只能移动无法点击的问题汇总
- 安装armadillo
- JVM的内存区域划分
- iframe之onload事件小记
- 161.Oracle数据库SQL开发之 SQL优化——比较执行查询的成本
- nginx 源码学习笔记(九)——基本容器——queue
- 第十四周项目1平衡二叉树
- 160.Oracle数据库SQL开发之 SQL优化——使用绑定变量
- nginx 源码学习笔记(八)——基本容器——array数组
- 159.Oracle数据库SQL开发之 SQL优化——若干
- KVC 和 KVO 的使用场景