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

news2024/11/16 12:30:16

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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

idea中定时+多数据源配置

因项目要求,需要定时从达梦数据库中取数据,并插入或更新到ORACLE数据库中 1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-…

01读《物联网安全研究综述:威胁、检测与防御》随笔

01读《物联网安全研究综述&#xff1a;威胁、检测与防御》随笔 摘要3 研究现状3.1 安全威胁3.1.1 云平台访问控制缺陷3.1.2 云平台恶意应用3.1.3 云平台实体和应用交互漏洞3.1.4 通信协议漏洞3.1.5 通信流量侧信道信息泄露3.1.6 设备固件漏洞3.1.7 基于语音信道的攻击3.1.8 基于…

SpringBoot核心功能-temp

yml&类配置 Configuration-processor

软文写作需要避免的四大误区,媒介盒子分享

有不少企业在做软文推广时在文案上容易踩坑&#xff0c;导致推广不起效。今天媒介盒子就来和大家聊聊软文写作中需要避免的四大类型&#xff0c;帮助企业提高软文推广效率。 一、 文案没有核心点 一篇软文的价值在于软文阐述的核心点&#xff0c;若没有一个核心点加以细化撰写…

2023年【A特种设备相关管理(锅炉压力容器压力管道)】考试题及A特种设备相关管理(锅炉压力容器压力管道)考试内容

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 A特种设备相关管理&#xff08;锅炉压力容器压力管道&#xff09;考试题是安全生产模拟考试一点通总题库中生成的一套A特种设备相关管理&#xff08;锅炉压力容器压力管道&#xff09;考试内容&#xff0c;安全生产模…

保姆级 Keras 实现 YOLO v3 三

保姆级 Keras 实现 YOLO v3 三 一. 分配 anchor box二. 正负样本匹配规则三. 为每一个 anchor box 打标签3.1 anchor box 长什么样?3.2 每一个 anchor box 标签需要填充的信息有哪些?3.3 ( Δ x , Δ y , Δ w , Δ h ) (\Delta x, \Delta y, \Delta w, \Delta h) (Δx,Δy,…

SUPER-ADAM: Faster and Universal Framework of Adaptive Gradients

这周看了啥&#xff1a; 本周主要来看看别人是如何证明收敛的&#xff0c;围绕算法SUPER-ADAM 的更新过程和论文后面的证明&#xff0c;&#xff08;这篇证明比上周的亲切多了&#xff0c;我哭死&#xff09;仔细看了证明每一步的推导&#xff08;至于作者如何想出的&#xff…

3分钟搞懂什么是Docker

Docker&#xff0c;一种可以将软件打包到容器中并在任何环境中可靠运行的工具。但什么是容器以及为什么需要容器呢&#xff1f;今天就来一起学快速入门一下Docker吧&#xff01;希望本文对您有所帮助。 假设您使用 Cobol 构建了一个在某种奇怪风格的 Linux 上运行的应用程序。…

如何通过京东工业商品API接口获取商品详情

一、引言 京东工业是一个专注于工业品采购和销售的电商平台&#xff0c;为工业领域的用户提供了一站式的采购解决方案。为了方便工业品供应商和开发者获取商品详情&#xff0c;京东工业提供了商品API接口。本文将详细介绍如何通过京东工业商品API接口来获取商品详情&#xff0…

【Python篇】python库讲解(pickle | random | numpy)

文章目录 &#x1f384;pickle模块&#x1f6f8;样例 &#x1f384;random&#x1f6f8;样例 &#x1f384;numpy库&#x1f6f8;例子 &#x1f384;pickle模块 pickle模块是Python标准库中的一个模块&#xff0c;用于序列化和反序列化Python对象。它可以将Python对象转化为字…

高翔《自动驾驶与机器人中的SLAM技术》第九、十章载入静态地图完成点云匹配重定位

修改mapping.yaml文件中bag_path&#xff1a; 完成之后会产生一系列的点云文件以及Keyframe.txt文件&#xff1a; ./bin/run_frontend --config_yaml ./config/mapping 生成拼接的点云地图map.pcd文件 &#xff1a; ./bin/dump_map --pose_sourcelidar 。、 完成第一次优…

halcon创建画布,并在画布上绘制显示

Halcon的画布主要用于图像显示和处理。以下是一个简单的使用Halcon画布的例子: 1.创建一个窗口: dev_open_window( Row, Column, Width, Height, Background : WindowHandle) 默认为&#xff1a;dev_open_window (0, 0, 512, 512, black, WindowHandle) **创建一个大小为512…

二、Java基础语法

day02 - Java基础语法 1. 注释 ​ 注释是对代码的解释和说明文字。 Java中的注释分为三种&#xff1a; 单行注释&#xff1a; // 这是单行注释文字多行注释&#xff1a; /* 这是多行注释文字 这是多行注释文字 这是多行注释文字 */ 注意&#xff1a;多行注释不能嵌套使用…

Ganache结合内网穿透实现远程或不同局域网进行连接访问

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

02-线程的两种创建方式继承Thread类和实现Runnable接口

继承Thread类创建线程 获取线程对象 编写一个类继承Thread类并在重写的run方法中编写业务逻辑代码,那么这个类就是一个线程类 Runnable接口的run方法没有抛出任何异常,所以子类重写run方法时也不能抛出任何异常,对于程序执行中遇到异常时只能捕获不能抛出 // 重写方法抛出的…

教你一招,用AI免费一分钟生成3D海报!

近些年&#xff0c;人工智能&#xff08;AI&#xff09;凭借其深远的影响和技术创新&#xff0c;引发了各领域的大变革&#xff0c;揭开了设计创作新时代的序幕。设计行业是这场变革的主要受益者之一。以海报设计为例&#xff0c;它过去一直需要专业设计师的精心构思和设计&…

工厂如何通过设备健康管理系统提高设备可靠性

在现代工厂运营中&#xff0c;设备可靠性对于保持生产效率和降低成本至关重要。然而&#xff0c;许多工厂面临设备故障和停机时间的挑战&#xff0c;这对生产计划和盈利能力产生了负面影响。为了解决这一问题&#xff0c;越来越多的工厂正在采用设备健康管理系统来提高设备的可…

鸿鹄云商:Java商城引领商业模式的潮流,免费搭建多种商城模式

java SpringCloud版本b2b2c鸿鹄云商平台全套解决方案 使用技术&#xff1a; Spring CloudSpring BootMybatis微服务服务监控可视化运营 B2B2C平台&#xff1a; 平台管理端(包含自营) 商家平台端(多商户入驻) PC买家端、手机wap/公众号买家端 微服务&#xff08;30个通用…

文心一言 VS 讯飞星火 VS chatgpt (156)-- 算法导论12.3 3题

三、用go语言&#xff0c;对于给定的 n 个数的集合&#xff0c;可以通过先构造包含这些数据的一棵二叉搜索树(反复使用TREE-INSERT 逐个插入这些数)&#xff0c;然后按中序遍历输出这些数的方法&#xff0c;来对它们排序。这个排序算法的最坏情况运行时间和最好情况运行时间各是…

带你手把手解读firejail沙盒源码(0.9.72版本)(三) etc-cleanup

文章目录 main.c代码解释 Makefile代码解释 ├── etc-cleanup │ ├── Makefile │ └── main.c这个文件夹在 linux 环境下使用 git clone 到本地才有&#xff0c;直接下载源代码没有 git clone https://github.com/netblue30/firejail.gitetc-clean 文件夹通常不是一…