AcWing 788. 逆序对的数量 解题思路及代码

news2024/9/24 7:25:52

先贴个题目:

以及原题链接: 788. 逆序对的数量 - AcWing题库icon-default.png?t=N7T8https://www.acwing.com/problem/content/790/

 这题也是板子题,就是对归并排序的衍生,我们先分析下如果用归并排序对排序区间进行二分的话,逆序对可能出现的情况:

第一种(红色):都在左侧区;第二种(黄色):一个在左侧区间,一个在右侧区间;第三种(蓝色):都在右侧区间 。

我们考虑一下极限情况,归并的递归到最底层,左右都只有一个元素的情况,就可以发现,只存在情况2,而在往上一层,由于左右区间已被排序且在递归的上一层已经算过了逆序对,所以第一第三种情况也不存在,所以层层递归上去,我们唯一要考虑的就是第二种情况,因此就有了我们的代码:

#include <iostream>
using namespace std;

const int N = 1e5 + 10;

int a[N], tmp[N];
long long ans = 0;

void gbsort(int left, int right, int list[])
{
    if (left >= right)
        return;
    int mid = (left + right) / 2;
    gbsort(left, mid, list);
    gbsort(mid + 1, right, list);
    int x = left, y = mid + 1, z = 0;
    while (x < mid + 1 && y < right + 1)
    {
        if (list[x] <= list[y])
        {

            tmp[z++] = list[x++];
        }
        else
        {
            ans += mid - x + 1;
            tmp[z++] = list[y++];
        }
    }
    while (x < mid + 1)
    {
        tmp[z++] = list[x++];
    }
    while (y < right + 1)
    {
        
        tmp[z++] = list[y++];
    }
    for (int i = 0; i < z;++i)
        list[left + i] = tmp[i];
}

int main()
{
    int n;
    cin >> n;
    for (int i = 0; i < n; ++i)
        scanf("%d", &a[i]);
    gbsort(0, n - 1, a);
    cout << ans;
    return 0;
}

代码就基本上是套归并的板子,没什么好说的。

by————2024.3.1刷题记录

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

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

相关文章

【DAY07 软考中级备考笔记】数据结构:线性结构,数组矩阵和广义表

数据结构&#xff1a;线性结构&#xff0c;数组矩阵和广义表 3月2日 – 天气&#xff1a;晴 1. 线性表的定义和存储方式 > 这一部分只需要掌握下面的两点即可&#xff1a; > > * 采用顺序存储和链式存储的特点 > * 单链表的插入和删除操作 2. 栈和队列 > 这里需…

antvX6 - Vue自定义节点,并实现多种画布操作,拖拽、缩放、连线、双击、检索等等

一、 首先 antv x6 分为两个版本 低版本和高版本 我这里是使用的2.0版本 并且搭配了相关插件 例如&#xff1a;画布的图形变换、地图等 个人推荐 2.0版本&#xff0c;高版本配置多&#xff0c;可使用相关插件多&#xff0c;但是文档描述小&#xff0c;仍在更新&#xff0c; 低…

【书生·浦语大模型实战营】第三节 课后作业

基于 InternLM 和 LangChain 搭建你的知识库 0.课程链接1.课后作业1.1基础作业&#xff1a;1.2 进阶作业&#xff1a; 0.课程链接 课程标题&#xff1a;基于 InternLM 和 LangChain 搭建你的知识库 课程链接&#xff1a;https://github.com/InternLM/tutorial/blob/main/langch…

【体育】体育锻炼之体能耐力、户外运动、中华武术(附大学生体质健康标准)

程序员养生指南之 【体育】体育锻炼之体能耐力、户外运动、中华武术&#xff08;附大学生体质健康标准&#xff09; 文章目录 一、如何增强耐力与体能&#xff1f;1、耐力训练的原理2、如何进行耐力训练3、如何提高长跑成绩 二、户外运动之绳结与下降1、绳结2、下降 三、中华武…

C语言 for 循环语句的基本格式是什么?

一、问题 for 循环语句在C语⾔中是最为常见的循环语句&#xff0c;其功能强⼤&#xff0c;⽽且⽤法灵活&#xff0c;那么它的基本格式是什么呢&#xff1f; 二、解答 for 语句的⼀般形式为&#xff1a; for(表达式1;表达式2;表达3&#xff09;语句; 每条 for 语句包含三个⽤分…

2023国赛样题路由部分【RIP RIPNG ACLRIP ACLRIPNG ISIS NAT64】

RT1串行链路、RT2串行链路、FW1、AC1之间分别运行RIP和RIPng协议&#xff0c;FW1、RT1、RT2的RIP和RIPng发布loopback2地址路由&#xff0c;AC1 RIP发布loopback2地址路由&#xff0c;AC1 RIPng采用route-map匹配prefix-list重发布loopback2地址路由。RT1配置offset值为3的路由…

ES6 | (二)ES6 新特性(下) | 尚硅谷Web前端ES6教程

文章目录 &#x1f4da;迭代器&#x1f407;定义&#x1f407;工作原理&#x1f407;自定义遍历数据 &#x1f4da;生成器函数&#x1f407;声明和调用&#x1f407;生成器函数的参数传递&#x1f407;生成器函数案例 &#x1f4da;Promise&#x1f4da;Set&#x1f407;Set的定…

输入一个整数,输出其最长连续因子。

输入一个整数&#xff0c;输出其最长连续因子。 例如 输入&#xff1a;60 输出&#xff1a;2 3 4 5 6 注意&#xff1a;1不算因子 输入输出格式 输入描述: 输入一个整数N&#xff0c;N<10000。 输出描述: 输出其最长连续因子&#xff0c;如果有多个最长&#xff0c;输出…

vcruntime140.dll为什么都是?解决vcruntime140.dll丢失的七种办法

计算机中一个常见的错误提示是“无法继续执行代码&#xff0c;因为找不到vcruntime140.dll”。这个问题的出现可能是由于vcruntime140.dll文件丢失或损坏导致的。本文将介绍解决这个问题的7个方法&#xff0c;并详细解释vcruntime140.dll丢失的原因以及其属性介绍。 一、vcrun…

解决在 Mac 上安装 Adobe 软件弹出提示:安装包已经被损坏并且不能被打开。

问题&#xff1a; “INSTALLER” is damaged and can’t be opened. You should eject the disk image. 解决方法和步骤&#xff1a; 打开安装包&#xff1b;将安装包 “INSTALLER” 拖动复制到某个文件夹&#xff0c;复制后的文件路径例如像这样&#xff1a;/Users/michael…

Pake 轻松构建轻量级多端桌面应用

Pake 利用 Rust 轻松构建轻量级多端桌面应用&#xff0c;支持 Mac / Windows / Linux。 小白用户&#xff1a;可以使用 「常用包下载」 方式来体验 Pake 的能力&#xff0c;也可试试 Action 方式。 开发用户&#xff1a;可以使用 「命令行一键打包」&#xff0c;对 Mac 比较友…

二维码门楼牌管理系统技术服务:构建智慧城市新标准

文章目录 前言一、二维码门楼牌管理系统的诞生背景二、标准地址编码的定义与作用三、二维码门楼牌管理系统的核心技术四、二维码门楼牌管理系统的应用优势五、二维码门楼牌管理系统在智慧城市建设中的作用六、结论与展望 前言 随着城市化的快速发展&#xff0c;传统的门楼牌管…

波奇学Linux:进程通信之消息队列,操作系统管理ipc资源,信号量

进程通信的前提&#xff1a;必须让不同进程看到同一份资源。 管道&#xff1a;文件缓冲区 共享内存&#xff1a;内存块 消息队列&#xff1a;队列 消息队列 让不同的进程看到同一个队列&#xff0c;允许不同的进程向内核发送带类型的数据块 带类型是为了区分数据块是由哪个…

Linux——匿名管道

Linux——匿名管道 什么是管道匿名管道的底层原理观察匿名管道现象读写端的几种情况写端慢&#xff0c;读端快写端快&#xff0c;读端慢 管道的大小写端关闭&#xff0c;读端一直读写端一直写&#xff0c;读端关闭 我们之前一直用的是vim来编写代码&#xff0c;现在有了vscode这…

Vue路由(黑马程序员)

路由介绍 将资代码/vue-project(路由)/vue-project/src/views/tlias/DeptView.vue拷贝到我们当前EmpView.vue同级&#xff0c;其结构如下&#xff1a; 此时我们希望&#xff0c;实现点击侧边栏的部门管理&#xff0c;显示部门管理的信息&#xff0c;点击员工管理&#xff0c;显…

CK98-数学家键盘配置

官方驱动和说明书下载地址 https://www.coolkiller.cn/download/lists_6.html 介绍&#xff1a;https://new.qq.com/rain/a/20221229A09B1M00 官方CK-98数学家驱动版本&#xff08;谨慎更新&#xff09; 如果升级驱动出现问题&#xff0c;重启驱动软件后会默认让你恢复的。 …

vue ts html 中如何遍历 Enum 类型构建页面结构

vue ts html 中如何遍历 Enum 类型构建页面结构 Enum 被用在一些有明确有限数量的值的时候&#xff0c;比如定义菜单的类型 一、需求 定义了一个 Enum 用来标记菜单类型&#xff1a; enum EnumMenuType {目录 1,菜单,按钮,外链 }你需要知道 Enum 它的序号是随第一个定义的值…

第四十七回 一丈青单捉王矮虎 宋公明二打祝家庄-强大而灵活的python装饰器

四面全是埋伏&#xff0c;宋江和众人一直绕圈跑不出去。正在慌乱之时&#xff0c;石秀及时赶到&#xff0c;教大家碰到白杨树就转弯走。走了一段时间&#xff0c;发现围的人越来越多&#xff0c;原来祝家庄以灯笼指挥号令。花荣一箭射下来红灯龙&#xff0c;伏兵自己就乱起来了…

简单控件属性设置

1、设置文本的内容 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"…

计算机毕业设计分享-ssm心理咨询预约管理系统 19086(赠送源码数据库)JAVA、PHP,node.js,C++、python,大屏数据可视化等

本科生毕业设计&#xff08;论文&#xff09; 题 目心理咨询预约管理系统的设计与实现 学 院 XXXXX 专业班级 XXXXX 学生姓名 XXXX 指导岗位 XXXX 撰写日期&#xff1a;2023年4月 目 录 摘要 1 绪论 1.1背景及意义 …