openjudge 7622 求排列的逆序数(归并)
7622:求排列的逆序数
- 总时间限制: 1000ms 内存限制: 65536kB
- 描述
-
在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对一些事物的排名来估计他(或她)对各种不同信息的兴趣,从而实现个性化的服务。
对于不同的排名结果可以用逆序来评价它们之间的差异。考虑1,2,…,n的排列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 构成的所有n!个排列中,最小的逆序数是0,对应的排列就是1,2,…,n;最大的逆序数是n(n-1)/2,对应的排列就是n,(n-1),…,2,1。逆序数越大的排列与原始排列的差异度就越大。
现给定1,2,…,n的一个排列,求它的逆序数。
- 输入
-
第一行是一个整数n,表示该排列有n个数(n <= 100000)。
第二行是n个不同的正整数,之间以空格隔开,表示该排列。 - 输出
- 输出该排列的逆序数。
- 样例输入
-
6 2 6 3 4 5 1
- 样例输出
-
8
- 提示
-
1. 利用二分归并排序算法(分治);
2. 注意结果可能超过int的范围,需要用long long存储。
解题思路:
归并排序,若遇到后面的数比前面的小时,逆序对数量为当前位置减去已排好的位置差。
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; typedef long long ll; const int N = 100000+10; int a[N],temp[N]; ll ans=0; void Merge(int l,int m,int r){int i=l,j=m+1,pos=l;while(i<=m&&j<=r){if (a[i]<a[j]) temp[pos++]=a[i++];else ans+=1ll*(j-pos),temp[pos++]=a[j++];}while(i<=m) temp[pos++]=a[i++];while(j<=r) temp[pos++]=a[j++];for (int i=l;i<=r;i++) a[i]=temp[i]; } void MergeSort(int l,int r){int mid=l+(r-l)/2;if(l>=r) return;MergeSort(l,mid);MergeSort(mid+1,r);Merge(l,mid,r); } int main(){int n,m;scanf("%d",&n);for (int i=1;i<=n;i++) scanf("%d",&a[i]);MergeSort(1,n);printf("%lld\n",ans);return 0; }
View Code
转载于:https://www.cnblogs.com/l999q/p/10349149.html
openjudge 7622 求排列的逆序数(归并)相关推荐
- 信息学奥赛一本通 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 ...
- 45.分支算法练习: 7622:求排列的逆序数
总时间限制: 1000ms 内存限制: 65536kB 描述 在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对一些事物的排名来估计他(或她)对各种不同信息的兴趣,从而实现个性 ...
- poj求排列的逆序数
此题为分治法归并 07:求排列的逆序数 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对 ...
- 信息学奥赛一本通(1237:求排列的逆序数)
1237:求排列的逆序数 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 6732 通过数: 2739 [题目描述] 在Internet上的搜索引擎经常需要 ...
- 百练 求排列的逆序数
百练 求排列的逆序数 总时间限制: 内存限制: 1000ms 65536kB 描述 在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对一些事物的排名来估计他(或她)对各种不同信 ...
- 求排列的逆序数(分治)
考虑1,2,-,n (n <= 100000)的排列i1,i2,-,in,如果其中存在j,k,满足 j < k 且 ij > ik, 那么就称(ij,ik)是这个排列的一个逆序. 一 ...
- 求排列的逆序数(信息学奥赛一本通-T1237)
[题目描述] 在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对一些事物的排名来估计他(或她)对各种不同信息的兴趣,从而实现个性化的服务. 对于不同的排名结果可以用逆序来评价它 ...
- 1237:求排列的逆序数
[题目描述] 在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对一些事物的排名来估计他(或她)对各种不同信息的兴趣,从而实现个性化的服务. 对于不同的排名结果可以用逆序来评价它 ...
- python逆序数的程序_计算逆序数(归并法)程序问题 (Python)
计算一个tuple里面的逆序数,用merge sort的办法.我写了以下代码,但是每次统计的时候,count设置为全局变量了: '''Count inversion Input: a sequence ...
- 本题要求实现一个求整数的逆序数的简单函数。_回溯算法:求组合总和(二)...
给「代码随想录」一个星标吧! ❝ 我将公众号文章和学习相关的资料整理到了Github :https://github.com/youngyangyang04/leetcode-master,方便大家在 ...
最新文章
- 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 优化算法
- 用于RGB-D语义分割的全局-局部传播网络
- iOS-消除CocoaPods内容警告
- Android RxJava 2.0中backpressure(背压)概念的理解
- [WP] 关于页面切换动画 记录
- 带有Python示例的math.sin()方法
- Matlab常用快捷键
- 浙江农林大学蓝桥杯程序设计竞赛校选拔赛(同步赛)签到题ABFGHIJ
- 服务器端文件名,挑战服务端各文件名中文含义及详细说明
- 火狐linux ubuntu16.04,在Ubuntu16.04系统上更新FireFox浏览器(即火狐浏览器)到最新版本...
- baacloud苹果_baacloud官网下载
- 5千万个密码的密码字典全家桶
- 安装stm32芯片包
- 常用激活函数(激励函数)理解与总结
- 基于Android的简单购物,基于Android的购物系统设计与实现
- 小球弹跳及MATLAB实现
- 《企业大数据系统构建实战:技术、架构、实施与应用》一2.3 大数据制度和流程规范...
- python数据分析实战 fabio nelli百度云_Python数据分析实战 内利(Fabio Nelli),杜春晓 9787115432209...
- C语言程序设计博客作业06
- ThinkPHP 多语言模块RCE漏洞复现
热门文章
- SPSS多重响应分析(多选题)【SPSS 016期】
- 自动化机器人 rpa_机器人过程自动化和机器人的出现
- 图像数据增强扩充数据库_分析数据扩充以进行图像分类
- fastreport按条件查询_查询代价的
- 【转载】python中strip(),lstrip(),rstrip()函数的区别
- java权限管理selor_Java进阶学习第四天——DOM入门
- visualbox 网页服务器,无法看到VirtualBox NGINX站点
- html 数据库 编写学生表,【数据库】用sql语句创建学生表如何做
- android 网络程序下载,Android从网络上下载文件
- android 获取用户名和密码,如何通过Android中的电子邮件地址获取用户名和密码