1311:【例2.5】求逆序对 归并排序

1311:【例2.5】求逆序对
【题目描述】
给定一个序列a1,a2,…,an,如果存在i<j并且ai>aj,那么我们称之为逆序对,求逆序对的数目。

【输入】
第一行为n,表示序列长度,接下来的n行,第i+1行表示序列中的第i个数。

【输出】
所有逆序对总数

【输入样例】
4
3
2
3
2
【输出样例】
3
【提示】
N≤105,Ai≤105

注意:

  • 逆序数的可以考虑是排序过程时大数在前小数在后的比较次数,如果数组比较大则不能考虑冒泡、选择、插入(时间复杂度很高)

  • 逆序数由于在递归排序时是中间偏后一位的数和之前的作比较,比较时只要第一位比它大则剩下的左序列都比他大,所以逆序数一次可求多个(冒泡一次交换只能得到一个逆序数对): num+=mid-i+1
    在这里插入图片描述

  • 由于数组比较大时,逆序数这个值可能很大,需要数据类型为long long
    代码:

#include <bits/stdc++.h>
using namespace std;
const int Max  = 100011;
int a[Max],r[Max];
long long num=0; 
void merge_sort(int s,int t);
int main(){
	int len;
	cin>>len;
	for(int i=0;i<len;i++){
		cin>>a[i];
	}
	merge_sort(0,len-1);
	cout<<num;
	return 0;
} 
void merge_sort(int s,int t){
	if(s==t) return ;
	int mid = (s+t)/2;
	merge_sort(s,mid);//先完成左边的排序 
	merge_sort(mid+1,t);//先再完成右边的排序 
	int i=s,j=mid+1,k=s;//开始合并序列 
	while(i<=mid&&j<=t){//将数据放到临时数组里面,判断的左边的序列右边子序列的第一个(即mid+1)
		if(a[i]<=a[j]){  //判断是否该值小于右边子序列的第一个值
			r[k]=a[i];
			k++,i++;
		}else{
			r[k]=a[j]; //否则较小的值就移到临时数组K
			num+=mid-i+1;
			k++,j++;
		}
	}
	while(i<=mid){ //复制左边的剩下序列过去 
		r[k]=a[i];
		k++,i++;
	} 
	while(j<=t){ //复制右边的序列 
		r[k]=a[j];
		k++,j++;
	}
	for(int i=s;i<=t;i++){
		a[i]=r[i];  //将此次排序的数据放回数组中
		cout<<a[i]<<" ";
	}
	cout<<endl;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/244303.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何轻松申请 AWS 免费服务器?看这篇图文教程就够了

一、免费云服务器资源介绍 作为初学者和建站入门人员&#xff0c;低成本搭建相关环境做练手是再实惠不过的&#xff0c;这里就为大家整理了一些提供免费云服务器资源的云平台&#xff0c;大家可以根据自己的需求和喜好选择合适的一款&#xff1a; Oracle Cloud&#xff1a;甲…

DApp测试网络Ganache本地部署并实现远程连接

文章目录 前言1. 安装Ganache2. 安装cpolar3. 创建公网地址4. 公网访问连接5. 固定公网地址 前言 Ganache 是DApp的测试网络&#xff0c;提供图形化界面&#xff0c;log日志等&#xff1b;智能合约部署时需要连接测试网络。 Ganache 是一个运行在本地测试的网络,通过结合cpol…

领导力的3个常见误区,你可能中了其中之一

什么是领导力&#xff1f; 领导力是组织和团队成功的关键。在一个不断变化的商业环境中&#xff0c;理解领导力的本质至关重要。这篇文章将揭示有关领导力的三个常见误解&#xff0c;帮助读者更清晰地认识领导者的角色。 关于领导力的常见误解 人们对领导力的理解经常受到错…

阿里云RDS MySQL 数据如何快速同步到 ClickHouse

云数据库 RDS MySQL 和 云数据库 ClickHouse 是阿里云推出的两个备受欢迎的数据库解决方案&#xff0c;它们为用户提供了可靠的数据存储方案、分析数仓方案&#xff0c;本文介绍如何快速将 RDS MySQL 的数据同步到云数据库 ClickHouse。 如何快速将RDSMySQL的数据同步到云数据库…

LeetCode-2487. 从链表中移除节点【栈 递归 链表 单调栈】

LeetCode-2487. 从链表中移除节点【栈 递归 链表 单调栈】 题目描述&#xff1a;解题思路一&#xff1a;可以将链表转为数组&#xff0c;然后从后往前遍历&#xff0c;遇到大于等于当前元素的就入栈&#xff0c;最终栈里面的元素即是最终的答案。解题思路二&#xff1a;递归&am…

SpringIOC之DependsOn

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+M…

基于Spring Boot+Vue.js的停车场收费管理系统 需求分析

1 用户&#xff08;收费员&#xff09; 1.1 主页 1.1.1 摄像头实时捕捉画面&#xff0c;如果有车牌号则识别出车牌&#xff08;如&#xff1a;京A11111&#xff09;&#xff0c;通过车牌底色识别出小型车&#xff08;蓝色&#xff09;、大型车&#xff08;黄色&#xff09;。…

Leetcode—131.分割回文串【中等】

2023每日刷题&#xff08;五十九&#xff09; Leetcode—131.分割回文串 算法思想 实现代码 class Solution { public:bool isPalindrome(string s, int left, int right) {while(left < right) {if(s[left] ! s[right--]) {return false;}}return true;}vector<vector…

LinuxBasicsForHackers笔记 -- 通过作业调度实现任务自动化

安排事件或作业自动运行 cron 守护进程和 cron 表 (crontab) 是用于安排常规任务的最有用的工具。 第一个是 crond&#xff0c;是在后台运行的守护进程。 cron 守护进程检查 cron 表以了解在指定时间运行哪些命令。 我们可以更改 cron 表来安排任务或作业在特定的一天或日期、…

【Java01】基本数据类型和引用数据类型

基本概念 基本数据类型是指能够直接存储数据值的数据类型&#xff0c;如整数、浮点数、布尔值等。 而引用数据类型是指存储的是指向实际数据所在位置的引用&#xff0c;如数组、字符串、对象等。 基本数据类型在内存中占用固定大小的空间&#xff0c;而引用数据类型则根据实际…

基于ssm企业人事管理系统的设计与实现论文

摘 要 进入信息时代以来&#xff0c;很多数据都需要配套软件协助处理&#xff0c;这样可以解决传统方式带来的管理困扰。比如耗时长&#xff0c;成本高&#xff0c;维护数据困难&#xff0c;数据易丢失等缺点。本次使用数据库工具MySQL和编程技术SSM开发的企业人事管理系统&am…

图文并茂讲VLAN,一遍就能理解

图文并茂讲VLAN&#xff0c;一遍就能理解 弱电行业圈2019-03-19 10:12 vlan的应用在网络项目中是非常广泛的&#xff0c;基本上大部分的项目都需要划分vlan&#xff0c;前几天我们讲到vlan的配置&#xff0c;有朋友就提到有没有更基础一些的内容&#xff0c;今天我们就从基础…

【python】比起os.path,Pathlib太方便了

简介 这次要介绍的是Python的标准库pathlib。 &#xff08;第N次……&#xff09; 老实说&#xff0c;这个标题有点夸张&#xff0c;但是pathlib比os.path更方便&#xff0c;不妨一试&#xff01; 什么是pathlib&#xff1f; pathlib 是一个用于处理文件路径的库。 通过path…

【华为数据之道学习笔记】3-9以特征提取为核心的非结构化数据管理

随着业务对大数据分析的需求日益增长&#xff0c;非结构化数据的管理逐 渐成为数据管理的重要组成部分。非结构化数据包括无格式文本、各类格式文档、图像、音频、视频等多种异构的格式文件&#xff0c;较之结构化数据&#xff0c;其更难标准化和理解&#xff0c;因此在存储、检…

随记-nginx docker + SSL 配置 - 配置等资源挂宿主机

随记-Nginx docker SSL 配置 - 配置等资源挂宿主机等 笔者动手配置&#xff0c;随手写的笔者&#xff0c;保证可操作 话说现在padmon是不是已经有代替docker的趋势了&#xff0c;谁能告诉我一把&#xff1f; 配置前准备 # 拉取nginx镜像 docker pull nginx #启动(暂时) doc…

基于YOLOv8深度学习的水稻害虫检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

【Mysql】InnoDB的表空间(九)

概述 表空间是一个在 InnoDB 中比较抽象的概念&#xff0c;对于系统表空间来说&#xff0c;对应着文件系统中一个或多个实际文件&#xff1b;而对于每个独立表空间来说&#xff0c;对应着文件系统中一个名为表名.ibd 的实际文件。可以把表空间想象成由很多个页组成的池子&…

gin使用自签名SSL证书与自签名证书不受信任方法解决

文章目录 1. X.509 V3证书介绍2、使用openssl生成自签名证书和解决不受信任问题2.1、生成根证书2.2、为域名生成证书申请文件2.3、为域名创建证书的扩展描述文件2.4、为域名创建证书 3、Go应用中使用自签名证书3.1、gin框架调用实现3.2、运行效果 4、使用java的bouncycastle生成…

HarmonyOS 开发实例—蜜蜂 AI 助手

HarmonyOS 开发实例—蜜蜂 AI 助手 1. 前言 自华为宣布 HarmonyOS NEXT 全面启动&#xff0c;近期新浪、B 站、小红书、支付宝等各领域头部企业纷纷启动鸿蒙原生应用开发。据媒体统计&#xff0c;如今 Top20 的应用里&#xff0c;已经有近一半开始了鸿蒙原生应用开发。虽然目…

【Jmeter】Jmeter基础4-Jmeter元件介绍之监听器

2.4、监听器 监听器主要用于收集、统计、查看和分析结果。 2.4.1、察看结果树 作用&#xff1a;查看取样器请求和响应结果&#xff0c;包括消息头&#xff0c;请求的数据&#xff0c;响应的数据等。一般在调试时才用&#xff0c;在实际运行压测时建议禁用&#xff0c;因为大量…