求排列的逆序数(分治)
考虑1,2,…,n (n <= 100000)的排列i1,i2,…,in,如果其中存在j,k,满足 j < k 且 ij > ik, 那么就称(ij,ik)是这个排列的一个逆序。
一个排列含有逆序的个数称为这个排列的逆序数。例如排列 263451 含有8个 逆序(2,1),(6,3),(6,4),(6,5),(6,1),(3,1),(4,1),(5,1),因此该排列的逆序数就是8。
现给定1,2,…,n的一个排列,求它的逆序数。
笨办法:O(n2)
分治O(nlogn):
1) 将数组分成两半,分别求出左半边的逆序数和右半边的逆序数
2) 再算有多少逆序是由左半边取一个数和右半边取一个数构成(要求O(n)实 现)
由归并排序改进得到,加上计算逆序的步骤
MergeSortAndCount: 归并排序并计算逆序数
代码:
#include<iostream> using namespace std; #define N 100000 + 5 int n; int a[N]; int b[N]; int ans = 0; void merge(int L, int R) {int mid = (L + R) / 2;int l = L;int r = mid+1;int count = 0;while(l <= mid && r <= R) {if(a[l] < a[r]) {b[count++] = a[r++]; } else {b[count++] = a[l++];ans += R - r + 1;}}while(l <= mid) b[count++] = a[l++];while(r <= R) b[count++] = a[r++];for(int i = L; i <= R; i++) a[i] = b[i-L]; } void MergeSortAndCount(int L, int R) {if(L < R) {int mid = (L + R) / 2;MergeSortAndCount(L, mid);MergeSortAndCount(mid + 1, R);merge(L, R);} } int main() {scanf("%d", &n);for(int i = 0; i < n; i++) scanf("%d", &a[i]);MergeSortAndCount(0, n-1);printf("%d\n", ans);return 0; }
转载于:https://www.cnblogs.com/kindleheart/p/9416210.html
求排列的逆序数(分治)相关推荐
- 百练 求排列的逆序数
百练 求排列的逆序数 总时间限制: 内存限制: 1000ms 65536kB 描述 在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对一些事物的排名来估计他(或她)对各种不同信 ...
- poj求排列的逆序数
此题为分治法归并 07:求排列的逆序数 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对 ...
- 信息学奥赛一本通 1311:【例2.5】求逆序对 | 1237:求排列的逆序数 | OpenJudge NOI 2.4 7622:求排列的逆序数 | 洛谷 P1908 逆序对
[题目链接] ybt 1311:[例2.5]求逆序对 ybt 1237:求排列的逆序数 OpenJudge NOI 2.4 7622:求排列的逆序数 洛谷 P1908 逆序对 ybt 1311,123 ...
- 信息学奥赛一本通(1237:求排列的逆序数)
1237:求排列的逆序数 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 6732 通过数: 2739 [题目描述] 在Internet上的搜索引擎经常需要 ...
- 45.分支算法练习: 7622:求排列的逆序数
总时间限制: 1000ms 内存限制: 65536kB 描述 在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对一些事物的排名来估计他(或她)对各种不同信息的兴趣,从而实现个性 ...
- 求排列的逆序数(信息学奥赛一本通-T1237)
[题目描述] 在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对一些事物的排名来估计他(或她)对各种不同信息的兴趣,从而实现个性化的服务. 对于不同的排名结果可以用逆序来评价它 ...
- 1237:求排列的逆序数
[题目描述] 在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对一些事物的排名来估计他(或她)对各种不同信息的兴趣,从而实现个性化的服务. 对于不同的排名结果可以用逆序来评价它 ...
- 分治递归逆序数_[模板] 归并排序 逆序数 分治
归并排序 图来自维基 递归调用的过程需要在脑中模拟清楚 然后是代码的细节问题 多复习多理解 刘汝佳版 #include using namespace std; const int MAXN = 1e ...
- 本题要求实现一个求整数的逆序数的简单函数。_回溯算法:求组合总和(二)...
给「代码随想录」一个星标吧! ❝ 我将公众号文章和学习相关的资料整理到了Github :https://github.com/youngyangyang04/leetcode-master,方便大家在 ...
最新文章
- OpenCV线特征Line Features
- VIM_shortcut_Cheat_sheet
- jquery mobile 从一个html的page跳转到另一个html的page
- Lua 的table遍历 【转】
- 【CCF】201709-1打酱油
- TikZ绘图示例——尺规作图:任意等分半圆弧
- php当前月每天时间戳,php获取当前月与上个月月初及月末时间戳的方法
- 关于办公室打印机纸张方向的问题
- 架构之美第八章-软件架构的含义
- The English (Porter2) stemming algorithm
- vue路由守卫及运用场景
- Xenserver命令大全
- php如何做防抖,Vue中怎么对事件进行防抖和节流操作?
- 联想F360移动硬盘拆解
- 程序猿想平稳度过35岁中年危机?不妨试着考个研
- JS如何改变元素内容?
- py 爬取汽车之家新闻案例
- 计算机语言phal语言,2.7 PhalApi 2.x 国际化
- 为什么有的程序员能力一般却能拿到好offer?
- netstat -i FLG含义
热门文章
- Real World Haskell 第七章 I/O
- ChineseCalendar类[转]
- MD5 - Bump Mapping
- 《OpenCV3编程入门》学习笔记5 Core组件进阶(四)图像对比度、亮度值调整
- android手机播放pc音乐播放器,最强手机音乐播放器?Foobar2K安卓版体验
- tensorboard merge报错_什么是TensorBoard?
- qq企业邮箱 java发送_spring配置javamail利用qq企业邮箱发送邮件。
- java 流的方式抓取网页 但是显示不全_用java抓取网页源代码时总是无法获取完整的源代码信息,求指导...
- 中jsp加载不出来layui_为何渔具厂生产不出来钓鱼人理想中的鱼竿呢,厂家说臣妾做不到啊...
- 用代码优雅的终止springboot服务