xtu oj 1167 逆序数(大数据)

news2024/10/9 6:18:01

回顾

Dedicated to you.

突然发现 markdown 语法输入 <3 会出现爱心 ❤️

之前说现实中给朋友讲一下这题,不知道是啥原因,她不方便听还是不愿意听,总之就是没讲。所以我把这题写一篇笔记,因为笔者写这题的时候真的算是非常的激动了,前置知识点是归并排序,刚好我复习了好几遍归并排序,看到这题的时候,算是刷算法题的时候能得到的为数不多的正反馈了。

另外因为笔者用的主题是黑色的背景,所以加粗不会正常显示,所以直接这样子标记了hhh

  1. A+B III
  2. 问题 H: 三角数
  3. 问题 G: 3个数
  4. 等式 数组下标查询,降低时间复杂度
  5. 1405 问题 E: 世界杯
  6. xtu 数码串
  7. xtu oj 神经网络

题目描述

给你一个序列x1,x2...,xn,如果数对<xi,xj>,其中i<j,而xi>xj我们称之为逆序数对。一个序列的逆序数对的数目,称为这个房列的逆序数。比如说序列312,逆序数对为 <3,1><3,2>,所以这个序列的逆序数为2。现在给你一个数字序列,请求其逆序数。


输入

每个样例为两行,第一行为一个整数n(n<10,000),表示序列中数字的个数,如果n0,则表示输入结束,不需要处理。 第二行是n个整数xi0≤xi≤100,000。输入数据保证序列中没有相同整数。


输出

每行输出一个整数,表示其序列数。


样例输入

3
312
4
1234
0


样例输出

2
0


思路

  1. 归并排序的意思就是,把排好序的两段归并到一块,从而使得整个序列都是有序的。这个题要求的是逆序对的数目,把数据范围扩大了一些,假设我们暴力去枚举的话,就会超出时间限制。
  2. 代码里面的 merge 表示的就是归并排序的意思。我们是在归并排序的过程中,顺便把逆序对的数目求出来了。
  3. q 数组存的是,我们输入的序列,或者理解为需要被排序的一串数字。tmp 数组是临时数组,充当中间人的作用,意思就是把 q 数组里面的两段先临时存到 tmp 数组里面,完了之后再把 tmp 数组里面的元素放回 q 数组,实现归并排序。
  4. 归并排序需要先递归,递归到能够直接排好序,然后再归并,不断归并到最后合成一段。
  5. 逆序对这里相较于归并排序多了一步,就是,我们假设两段排好序的数组,这里的排好序指的是从小到大排好序。一段是从,[l,mid],一段是从 [mid+1,r] ,我们把左边一段叫做 PQ ,右边一段叫做 HH ,我们比较 PQHH 里面的元素,把小的元素存到临时数组里面,假设 PQ 里面的元素小,这属于正常情况,不用管,假设 HH 里面的元素小,这就出现逆序对了,mid-i+1 这么多个元素都在 j 指向的这个元素左边且比 q[j] 大,均满足逆序对的定义,所以答案加上 mid-i+1
  6. 后面就是,一段更新完了之后,把另一段全部存到临时数组里面,再把临时数组里面的元素存回原来的数组即可
  7. 时间复杂度是 O(n*logn)

c 语言代码

#include<stdio.h>
#define N 100010
int q[N],tmp[N];
#define LL long long

LL merge(int l,int r){
	if(l>=r){
		return 0;
	}
	int mid=(l+r)/2;
	LL res=merge(l,mid)+merge(mid+1,r);
	
	int i=l,j=mid+1;
	int k=0;
	while(i<=mid&&j<=r){
		if(q[i]<=q[j]){
			tmp[k++]=q[i++];
		}else{
			tmp[k++]=q[j++];
			res=res+(mid-i+1);
		}
	}
	while(i<=mid){
		tmp[k++]=q[i++];
	}
	while(j<=r){
		tmp[k++]=q[j++];
		res=res+(mid-i+1);
	}
	for(i=l,j=0;i<=r;i++,j++){
		q[i]=tmp[j];
	}
	return res;
}

int main(){
	int n;
	while(scanf("%d",&n)){
		if(n==0){
			break;
		}
		for(int i=0;i<n;i++){
			scanf("%d",&q[i]);
		}
		printf("%lld\n",merge(0,n-1));
	}
	return 0;
}

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

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

相关文章

基于matlab的语音信号处理

摘要 利用所学习的数字信号处理知识&#xff0c;设计了一个有趣的音效处理系统&#xff0c;首先设计了几种不同的滤波器对声音进行滤波处理&#xff0c;分析了时域和频域的变化&#xff0c;比较了经过滤波处理后的声音与原来的声音有何变化。同时设计实现了语音的倒放&#xf…

从0开始linux(9)——进程(1)进程管理

欢迎来到博主的专栏&#xff1a;从0开始linux 博主ID&#xff1a;代码小豪 文章目录 查看进程进程管理PID与PPIDfork函数 在上一篇中我们了解到&#xff1a;当运行程序时&#xff0c;操作系统会将磁盘中的二进制文件读取到内存当中&#xff0c;程序运行到结束的过程称为进程&am…

【C++ 11】auto 自动类型推导

文章目录 【 1. 基本用法 】【 2. auto 的 应用 】2.0 auto 的限制2.1 简单实例2.2 auto 与指针、引用、const2.4 auto 定义迭代器2.5 auto 用于泛型编程 问题背景 在 C11 之前的版本&#xff08;C98 和 C 03&#xff09;中&#xff0c;定义变量或者声明变量之前都必须指明它的…

目标检测YOLO实战应用案例100讲-【目标检测】YOLOV11

目录 前言 算法原理 YOLO发展历程 什么是 YOLO11 YOLOv11 的主要特点 YOLO各版本概览 核心优势: YOLOv11改进方向 YOLOv11功能介绍 YOLOv11关键创新 YOLOv11 指标展示 YOLOV11实验 环境设置 准备数据集 训练模型 验证模型 应用领域 一、智慧交通与自动驾…

【Linux实践】实验八:Shell程序的创建及变量

文章目录 实验八&#xff1a;Shell程序的创建及变量实验目的&#xff1a;实验内容&#xff1a;操作步骤&#xff1a;1. 查看环境变量2. 定义变量AK3. 定义变量AM并比较4. 创建Shell程序 实验八&#xff1a;Shell程序的创建及变量 实验目的&#xff1a; 掌握Shell程序的创建过…

【C++】AVL树的底层以及实现

个人主页 文章目录 ⭐一、AVL树的概念&#x1f389;二、AVL树的性质&#x1f3dd;️三、AVL树的实现1. 树的基本结构2. 树的插入3. 树的旋转• 左单旋• 右单旋• 左右双旋• 右左双旋 &#x1f3a1;四、AVL树的其它功能1. 树的查找2. 树的遍历3. 树的高度4. 树的大小 &#x…

RK3568平台开发系列讲解(I2C篇)i2c 总线驱动介绍

🚀返回专栏总目录 文章目录 一、i2c 总线定义二、i2c 总线注册三、i2c 设备和 i2c 驱动匹配规则沉淀、分享、成长,让自己和他人都能有所收获!😄 i2c 总线驱动由芯片厂商提供,如果我们使用 ST 官方提供的 Linux 内核, i2c 总线驱动已经保存在内核中,并且默认情况下已经…

vulnhub-matrix-breakout-2-morpheus靶机的测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、Getshell ①nc反弹shell连接 ②Webshell上传 3、提权 ①使用kali自带的poc ②使用msf进行渗透 四、结论 一、测试环境 1、系统环境 渗透机&#xff1a;kali2021.1(19…

项目构建工具

一般面试中被问到的项目构建工具&#xff0c;常常会回答的是Maven 今天大概了解了一下目前项目构建构建有Maven,Ant,Gradle Gradle 是一个构建工具&#xff0c;它是用来帮助我们构建app的&#xff0c;构建包括编译&#xff0c;打包等过程。我们可以为Gradle指定构建规则&…

matlab 相关

1、xcorr 本质上是两个函数做内积运算 相关算法有两种&#xff1a; 在Matlab上既可以 1.用自带的xcorr函数计算互相关&#xff0c;2.通过在频域上乘以共轭复频谱来计算互相关&#xff1b; 网友验证程序 clc;clear;close all; % s1,s2为样例数据 s1 [-0.00430297851562500;-…

攻防世界----->Replace

前言&#xff1a;做题笔记。 下载 查壳。 upx32脱壳。 32ida打开。 先运行看看&#xff1a; 没有任何反应&#xff1f; 猜测又是 地址随机化(ASLR)---遇见过。 操作参考&#xff1a; 攻防世界----&#xff1e;Windows_Reverse1_dsvduyierqxvyjrthdfrtfregreg-CSDN博客 然后…

Spring系列 Bean创建过程

文章目录 初始化时机单例初始化流程getBeandoGetBeangetSingleton(String) 获取单例getSingleton(String, ObjectFactory) 创建单例beforeSingletonCreationcreateBeanafterSingletonCreation 创建 Bean 过程doCreateBeanaddSingletonFactory createBeanInstance 创建 Bean 对象…

医院管理智能化:Spring Boot技术革新

3系统分析 3.1可行性分析 通过对本医院管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本医院管理系统采用JAVA作为开发语言&#xff0c;Spring Boot框…

ctf.bugku - game1

题目来源&#xff1a; game1 - Bugku CTF 访问页面&#xff0c;让玩游戏 得到100分&#xff0c;没拿到flag 查看页面源码&#xff0c; GET请求带有 score、IP、sign 三个参数&#xff0c;最后的flag 应该跟分数有关&#xff1b; 给了score一个99999分数&#xff0c; sign 为 …

STM32编码器接口

一、概述 1、Encoder Interface 编码器接口概念 编码器接口可接收增量&#xff08;正交&#xff09;编码器的信号&#xff0c;根据编码器旋转产生的正交信号脉冲&#xff0c;自动控制CNT自增或自减&#xff0c;从而指示编码器的位置、旋转方向和旋转速度每个高级定时器和通用…

如何录制微课教程?K12教育相关课程录制录屏软件推荐

在当今数字化教育的时代&#xff0c;微课作为一种重要的教学资源&#xff0c;受到了越来越多教师和学生的关注。制作一节优质的微课&#xff0c;录制是关键的环节之一。下面我们将结合相关知识&#xff0c;详细介绍如何录制微课教程。 一、微课录制前的准备 1.教学设计文档编写…

Ultralytics:YOLO11使用教程

Ultralytics&#xff1a;YOLO11使用教程 前言相关介绍前提条件实验环境安装环境项目地址LinuxWindows YOLO11使用教程进行目标检测进行实例分割进行姿势估计进行旋转框检测进行图像分类 参考文献 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多…

题目:圆桌会议

解题思路&#xff1a; 结果的顺序就是原序列的逆序&#xff0c;例如12345就是54321为结果顺序。同时将一个顺序序列&#xff08;非环&#xff09;变成逆序需要的次数为。想要的得到最短的交换次数&#xff0c;只需要将环尽量对半分&#xff0c;然后分别对两部分进行顺序序列变逆…

DAY27||回溯算法基础 | 77.组合| 216.组合总和Ⅲ | 17.电话号码的字母组合

回溯算法基础知识 一种效率不高的暴力搜索法。本质是穷举。有些问题能穷举出来就不错了。 回溯算法解决的问题有&#xff1a; 组合问题&#xff1a;N个数里面按一定规则找出k个数的集合切割问题&#xff1a;一个字符串按一定规则有几种切割方式子集问题&#xff1a;一个N个数…

SeaTunnel如何创建Socket数据同步作业?

本文为Apache SeaTunnel Socket Connector的使用文档&#xff0c;旨在帮助用户快速理解和有效利用Socket Connector&#xff0c;助力用户的应用程序实现高效、稳定的网络通信。 Socket是应用层与TCP/IP协议族之间进行通信的中间软件抽象层&#xff0c;它是网络编程的基础&…