Problem F. Ricky队形
时间限制 1000 ms
内存限制 256 MB
题目描述
Ricky班里有n(2<=n<=100000)个人,每个人有一个学号ai(1<=ai<=n),保证学号ai互不相同。Ricky手里有一张班级合影,他发现虽然大家是按身高从低到高排好队的,但如果按学号看的话却不一定是从小到大,他想看一看如果按照学号来看,这个队排的有多乱。Ricky把混乱度定义为队列中逆序对的个数,即:如果从前往后看,大家正好是按照学号从小到大排列的,那逆序对为0个,混乱度为0;而每能找到两个人形成了学号大同学的在前,学号小的在后(即i < j且ai > aj),就称其为一个逆序对,混乱度计数也要加1。由于Ricky班里人可能很多,Ricky实在数不过来了,现在告诉你合影上同学们的学号(按从前往后),请你帮忙编写程序计算一下混乱度,满足一下Ricky的好奇心。

输入数据
第一行有一个整数n(2<=n<=100000),表示Ricky班上的人数; 第二行有n个整数a1,a2,…,an(1<=ai<=n),表示合影上同学们的学号。

输出数据
输出一个整数,表示合影上排列的混乱度(逆序对个数)

样例输入
5
1 3 4 2 5
样例输出
2
思路:
利用归并算法中的“并”,在并的时候,前后两个被排序好的数组会按照下标依次比较大小,

代码:

#include<iostream>
using namespace std;
int n;
#define ll long long
ll nums[100001];//待归并的
ll arr[100001]; //归并后的
ll cnt;//混乱程度void mergeSort(int l, int r) {if (l == r) return;int mid = (l + r) / 2;mergeSort(l, mid);mergeSort(mid + 1, r);//开始归并int i = l, j = mid + 1, k = 0;while (i <= mid && j <= r) {if (nums[i] > nums[j]) {cnt += mid + 1 - i;arr[k++] = nums[j++];}else arr[k++] = nums[i++];}while(i<=mid) arr[k++] = nums[i++];while(j<=r) arr[k++] = nums[j++];//救命!原来这一步是关键:必须更新原来的nums数组for (int i = 0, j = l; j <= r; i++, j++) nums[j] = arr[i];}int main() {cin >> n;for (int i = 0; i < n; i++) {cin >> nums[i];}mergeSort(0, n - 1);for (int i = 0; i < n; i++) {cout<< arr[i]<<" ";}cout <<endl<< cnt;}

算法笔记【归并排序】:逆序对相关推荐

  1. ACM算法训练【逆序对的数量】

    ACM算法训练[逆序对的数量] 题目说明 数据范围 样例 分析与代码 题目说明 数据范围 样例 分析与代码 ①归并排序基本思想: ②在归并的过程中,逆序对出现的三种情况: a.全部出现在左边的区间 b ...

  2. jzoj3462-休息【归并排序,逆序对】

    正题 大意 一个序列,每次将一个单调下降的区间翻转,求最少次数将这个序列变成单调上升. 解题思路 考虑将O(n2)O(n2)O(n^2)的暴力转换. 我们先将开始时单调下降的区间翻转,然后我们会发现只 ...

  3. 鬼脚图 计蒜客17353 NOIP模拟 归并排序逆序对

    题面在最下方. 本题观察后可以发现,当两个竖线遇到横线的时候,两个竖线所代表的数字会交换位置 所以对于一根链接<x,x+1>的横线,swap(a[x],a[x+1])即可.这个是第一问 对 ...

  4. 算法笔记-归并排序、归并排序时间复杂度、例题

    1. 归并排序 1)整体就是一个简单递归,左边排好序.右边排好序.让其整体有序 2)让其整体有序的过程里用了外排序方法 3)利用master公式来求解时间复杂度 4)归并排序的实质,实质是减少了元素间 ...

  5. 求逆序对---学习笔记

    算法篇:逆序对_依稀_yixy的博客-CSDN博客_逆序对算法逆序对的计算https://blog.csdn.net/qq_39151563/article/details/108309464参考了当 ...

  6. 数据结构与算法笔记:分治策略之Greatest Slice,2-Way Merge,Counting Inversions,linearSelect,Diameter,Closest Pair

    Divide and Conquer 分而治之概述 分而治之,就像是团队合作,将一项工作分解成不同的成员去处理 一般情况,我们面临的规模比较大,用n来表示,我们会把它分为若干个任务来同步进行处理 一般 ...

  7. 洛谷P1966 火柴排队(cdq分治 + 逆序对)

    2020.6.8 练二分了当然要练练分治,这些基础的处理手段真的还是蛮好用的. 这道题是问ai 和bi的平方和最小,最少需要的相邻的交换次数.手动模拟了一下感觉没什么思路.但是后来注意到每次只能移动相 ...

  8. -9 逆序输出一个整数的各位数字_【每日算法】基础算法——归并排序[求逆序对的数量](四)(思想很经典)...

    题目内容 给定一个长度为n的整数数列,请你计算数列中的逆序对的数量. 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆 ...

  9. 【数据结构笔记32】排序算法概述、简单排序(冒泡排序、插入排序)、逆序对

    本次笔记内容: 9.1.1 概述 9.1.2 冒泡排序 9.1.3 插入排序 9.1.4 时间复杂度下界 文章目录 排序算法前提条件 冒泡排序 插入排序 时间复杂度下界 逆序对(inversion) ...

最新文章

  1. 《Advanced PHP Programming》读书笔记
  2. Android之多线程工作-AsyncTask与handler
  3. BZOJ4161 常系数齐次线性递推
  4. Spring 3 MVC深入研究
  5. 清除故障,Windows2003更加亲切
  6. 江阴南菁高考2021高考成绩查询,江阴8所四星级高中高考成绩公布 南菁高中本一进线率达到了92.97%...
  7. JAVA EE配TOMCAT
  8. python 整数对应的字符,在Python中将字符串从字母解密为整数映射
  9. 牛!各大公司【薪资待遇】一览,我心动了
  10. 计算机键盘的型号,标准电脑键盘尺寸
  11. 查询瀚高数据库的创建时间
  12. 计算机安全的最后一道防线,网络安全的第一道防线是(图文)
  13. C++使用CFile类文件读写
  14. 2019年1月1日起,国家推出新的个人所得税政策,起征点上调值5000元。也就是说税前工资扣除五险一金(五险一金数额假设是税前工资的10%) * 后如果不足5000元,则不交税。
  15. 当编程语言都变成女孩子 猿哥想想都觉得冲动
  16. vsd格式文件如何打开?
  17. Yoshua:深度学习AI迈向人类水平的挑战
  18. web servlce
  19. 一键备份还原ghost_一键ghost硬盘版_onekey ghost_一键还原精灵
  20. 新版Edge 浏览器的禁用扩展提示

热门文章

  1. Element UI数字组件四舍五入问题及居右显示
  2. SpringBoot中级
  3. AI机器人源码,电话机器人源码和系统部署运行环境freeswitch
  4. nmap常用命令详细使用|命令带实例
  5. UVM实战(张强)-- UVM中的寄存器模型
  6. 最新UI界面漫画小程序源码,带后台支持流量主,24小时全自动更新!
  7. 软考程序员 c java 二选一_下半年参加软考的初级程序员考试,有什么参考书推荐么?...
  8. Linux查看日志命令(4种常见方式)
  9. sql优化的15个小技巧(必知五颗星),面试说出七八个就有了
  10. 前端的学习之路:初级CSS---w3cschool的导航条