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 求排列的逆序数(归并)相关推荐

  1. 信息学奥赛一本通 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 ...

  2. 45.分支算法练习:  7622:求排列的逆序数

    总时间限制: 1000ms 内存限制: 65536kB 描述 在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对一些事物的排名来估计他(或她)对各种不同信息的兴趣,从而实现个性 ...

  3. poj求排列的逆序数

    此题为分治法归并 07:求排列的逆序数 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对 ...

  4. 信息学奥赛一本通(1237:求排列的逆序数)

    1237:求排列的逆序数 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 6732     通过数: 2739 [题目描述] 在Internet上的搜索引擎经常需要 ...

  5. 百练 求排列的逆序数

    百练 求排列的逆序数 总时间限制: 内存限制: 1000ms 65536kB 描述 在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对一些事物的排名来估计他(或她)对各种不同信 ...

  6. 求排列的逆序数(分治)

    考虑1,2,-,n (n <= 100000)的排列i1,i2,-,in,如果其中存在j,k,满足 j < k 且 ij > ik, 那么就称(ij,ik)是这个排列的一个逆序. 一 ...

  7. 求排列的逆序数(信息学奥赛一本通-T1237)

    [题目描述] 在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对一些事物的排名来估计他(或她)对各种不同信息的兴趣,从而实现个性化的服务. 对于不同的排名结果可以用逆序来评价它 ...

  8. 1237:求排列的逆序数

    [题目描述] 在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对一些事物的排名来估计他(或她)对各种不同信息的兴趣,从而实现个性化的服务. 对于不同的排名结果可以用逆序来评价它 ...

  9. python逆序数的程序_计算逆序数(归并法)程序问题 (Python)

    计算一个tuple里面的逆序数,用merge sort的办法.我写了以下代码,但是每次统计的时候,count设置为全局变量了: '''Count inversion Input: a sequence ...

  10. 本题要求实现一个求整数的逆序数的简单函数。_回溯算法:求组合总和(二)...

    给「代码随想录」一个星标吧! ❝ 我将公众号文章和学习相关的资料整理到了Github :https://github.com/youngyangyang04/leetcode-master,方便大家在 ...

最新文章

  1. 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 优化算法
  2. 用于RGB-D语义分割的全局-局部传播网络
  3. iOS-消除CocoaPods内容警告
  4. Android RxJava 2.0中backpressure(背压)概念的理解
  5. [WP] 关于页面切换动画 记录
  6. 带有Python示例的math.sin()方法
  7. Matlab常用快捷键
  8. 浙江农林大学蓝桥杯程序设计竞赛校选拔赛(同步赛)签到题ABFGHIJ
  9. 服务器端文件名,挑战服务端各文件名中文含义及详细说明
  10. 火狐linux ubuntu16.04,在Ubuntu16.04系统上更新FireFox浏览器(即火狐浏览器)到最新版本...
  11. baacloud苹果_baacloud官网下载
  12. 5千万个密码的密码字典全家桶
  13. 安装stm32芯片包
  14. 常用激活函数(激励函数)理解与总结
  15. 基于Android的简单购物,基于Android的购物系统设计与实现
  16. 小球弹跳及MATLAB实现
  17. 《企业大数据系统构建实战:技术、架构、实施与应用》一2.3 大数据制度和流程规范...
  18. python数据分析实战 fabio nelli百度云_Python数据分析实战 内利(Fabio Nelli),杜春晓 9787115432209...
  19. C语言程序设计博客作业06
  20. ThinkPHP 多语言模块RCE漏洞复现

热门文章

  1. SPSS多重响应分析(多选题)【SPSS 016期】
  2. 自动化机器人 rpa_机器人过程自动化和机器人的出现
  3. 图像数据增强扩充数据库_分析数据扩充以进行图像分类
  4. fastreport按条件查询_查询代价的
  5. 【转载】python中strip(),lstrip(),rstrip()函数的区别
  6. java权限管理selor_Java进阶学习第四天——DOM入门
  7. visualbox 网页服务器,无法看到VirtualBox NGINX站点
  8. html 数据库 编写学生表,【数据库】用sql语句创建学生表如何做
  9. android 网络程序下载,Android从网络上下载文件
  10. android 获取用户名和密码,如何通过Android中的电子邮件地址获取用户名和密码