AcWing 788. 逆序对的数量

C++详解 | #define预处理器 文章目录一、预处理器二、语法三、原理三、参数宏四、类型宏五、#和##运算符 一、预处理器 预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理。 所有的预处理器指令都是以井号(#)开头,只有空格字符可以出现在预处理指令之前。预处理指令不是 C++ 语句,所以它们不会以分号(;)结尾。 二、语法 #define 预处理指令用于创建符号常量。该符号常量通常称为宏,指令的一般形式是: #define marco-name replace-text 三、原理 考虑以下代码: #include<io 阅读详情

题目描述

给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。

逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满 i < j 且 a[i] > a[j],则其为一个逆序对;否则不是。

输入格式

第一行包含整数n,表示数列的长度。

第二行包含 n 个整数,表示整个数列。

输出格式

输出一个整数,表示逆序对的个数。

数据范围

1≤n≤100000

输入样例:

6
2 3 4 5 6 1
输出样例:

5
解题报告

题意理解

这道题目就是让我们求解一个数组中的逆序对个数.

算法处理

求解逆序对问题,实际上有三种算法可以处理,分别是冒泡算法,归并排序,以及树状数组求解.

这里显然我们可以用性价比最高,代码最好写,效率特高的归并排序算法.

关于归并排序算法,各位看官可以点击这里哦

我们要注意一点,就是当我们发现填充第二个数组中的数,加入备用数组的使用,都要统计mid−i+1
,因为此时此刻,我们第一个数组中剩余的所有数,都会和它构成逆序对.

代码求解

#include <iostream>

using namespace std;

const int N = 1e6 + 10;

int a[N], tmp[N];

void merge_sort(int q[], int l, int r)
{
    if (l >= r) return;

    int mid = l + r >> 1;

    merge_sort(q, l, mid), merge_sort(q, mid + 1, r);

    int k = 0, i = l, j = mid + 1;
    while (i <= mid && j <= r)
        if (q[i] <= q[j]) tmp[k ++ ] = q[i ++ ];
        else tmp[k ++ ] = q[j ++ ];
    while (i <= mid) tmp[k ++ ] = q[i ++ ];
    while (j <= r) tmp[k ++ ] = q[j ++ ];

    for (i = l, j = 0; i <= r; i ++, j ++ ) q[i] = tmp[j];
}

int main()
{
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i ++ ) scanf("%d", &a[i]);

    merge_sort(a, 0, n - 1);

    for (int i = 0; i < n; i ++ ) printf("%d ", a[i]);

    return 0;
}

#include <bits/stdc++.h>
using namespace std;
const int N=100000  +100;
#define int long long
#define fir(i,a,b) for(int i=a;i<=b;i++)
int b[N],a[N],n,cnt;
void merge_sort(int a[],int l,int r)
{
    if (r-l<1)
        return ;
    int mid=(l+r)>>1;
    merge_sort(a,l,mid);
    merge_sort(a,mid+1,r);
    int i=l,j=mid+1;
    fir(k,l,r)
        if (j>r || i<=mid && a[i]<=a[j])
            b[k]=a[i++];
        else
            cnt+=mid-i+1,b[k]=a[j++];//统筹不满足的情况
    fir(k,l,r)
        a[k]=b[k];
}
signed main()
{
    ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    merge_sort(a,1,n);
    cout<<cnt;
    return 0;
}

AcWing算法基础课-788逆序对的数量-Java题解 本文详细讲解了如何通过归并排序算法高效计算数组中的逆序对数量。通过递归分治和归并过程,我们不仅实现了数组的排序,还在排序过程中巧妙地计算了逆序对的数量。 阅读详情

相关推荐

【AcWing 788. 逆序对的数量】题解

【AcWing 788. 逆序对的数量】 ​ C++ 题解一:归并排序 假定有把一个无序序列一分为二为两个有序序列,然后对其归并,设置双指针 iii ,jjj 分别指向左半区间和右半区间,即两个元素 aaa 和 bbb 分别位于左右两个区间产生的逆序对数量为 s0s_0s0​,元素 aaa 和 bbb 同时位于左半区间或右半区间产生的逆序对数量为 s1s_1s1​ 和 s2s_2s2​ 。 ​ 那么,当指针 iii 所指的元素 nums[i]nums[i]nums[i] 第一次大于指针 jjj 所指的元素

Far_Rainbow的博客 1336

define int long long解释

对于题目给定的数据范围,有必要选择一种合理的数据类型来高效处理问题 long long的范围大概是10^18,int的范围大概是1e9+ 1.#define int long long ,main函数要改成有符号型 signed main() 2.long long 不仅费空间,还容易超时 3.变量类型为 long long,也可以用 typedef long long ll(直接用ll代替long long的定义) 举例: #include<bits/stdc++.h> using names

qq_50883182的博客 1万+

【ACWing】788. 逆序对的数量

思路是归并排序(分治)。先累加左右两边的逆序对数量,然后做二路归并的时候,顺便计算跨越两边的逆序对数量。由于左右两半边已经排好序了,计算跨越两边的逆序对数量变得很简单。是左半边的最后一个数的下标。输出一个整数,表示逆序对的个数。为第二个数的逆序对数列,就是。的数列,计算其逆序对数量。个整数,表示整个数列。的时候,就可以累加以。

数学、算法爱好者的博客 415

#define int long long

功能:把所有的int替换成long long。

willem248的博客 2845

题解:AcWing 788 逆序对的数量

等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第。输出一个整数,表示逆序对的个数。,则其为一个逆序对;个整数,表示整个数列。本文分享的必刷题目是从。

团爸讲算法 442

D类功放LC滤波器实战:从Q值0.707到EMI优化的完整设计流程

本文详细解析了D类功放LC滤波器的完整设计流程,从确定截止频率与Q值0.707的理论基础出发,到参数计算、仿真验证及关键元器件选型,并提供了应对EMI超标和过流保护等实际问题的进阶调试策略。文章强调,精准的LC滤波器设计是平衡音质、稳定性与电磁兼容性的关键,尤其需关注电感饱和电流与电容直流偏置等细节。

e4f5g6h7的博客 1034

C++ 开long long 的小技巧

但一定要注意:#define int long long也会导致int main() 里的int 变成 long long,编译器会报错。那就是#define int long long,这是一个模版,可以直接用,比如这段代码。注意到了么,这里sum虽然使用的是int定义,但是却可以存下超过2147483647的数。不知道大家有没有经常在做题的时候忘记开long long?(反正我是经常忘记开的。这就是因为我们使用了#define int long long。这会使所有的int 都变成long long。

bigeyes0_0的博客 2315

WRF替换静态地理数据中的土地利用数据(WRF替换下垫面数据)

   在进行自己的WRF项目模拟的时候,因为需要用中国土地利用数据替换WRF内嵌老旧的土地利用数据,故需要将土地利用进行替换。我使用的中国的土地利用数据是来自中国土地利用数据(1980-2015)。其中我以下载的lucc1980为例进行演示。 1、坐标转换    (1)下载的lucc1980数据如下图所示:    (2)在ArcMap中打开如下图所示: 打开属性表可以看到,lucc1980的坐标系为投影坐标系Krasovsky_1940_Albers,数据格式为GRID。这里需要将投影坐标系转换成地理坐

GIS 1万+

long long型有什么用

在我们日常作oj题时,往往看到大佬定义数据类型时用long long型,那时候笔者只是认为long long型数据范围比较大,其实不然,下面就趁机总结一番吧。long long型是C++的64位(-9223372036854775808 ~ 9223372036854775807)整型的基本类型,占用8个字节,而int型是32位(-2147483648 ~ 2147483647),所以long long型的范围要比int型范围大得多。

m0_73500410的博客 3626

vrep小车避障算法_V-REP 多车道巡线与避障

任务概要在给定的赛道中,实现多车道的避障和视觉巡线。避障算法没有限定,可使用人工势场、RRT等路径规划算法。车体大小、赛道信息以及参考资料在此处下载。完成情况已学习并能初步使用 V-REP Python Remote API 接口,实现 Python 与 V-REP 的功能交互。已实现基于视觉传感器的多车道巡线功能。已实现基于视觉传感器的多车道避障功能。V-REP Python Remote AP...

weixin_39692037的博客 1833

QLIB使用tushare更新每日行情

0. 介绍 qlib每日数据的源是yahoo,更新速度较慢并且不稳定。tushare每日行情是免费接口,速度较快。 1. 获取行情数据,保存为csv格式。 def GetDataFromTushare(self, today, fpath): pro = ts.pro_api() df = pro.daily(trade_date=today) for index, row in df.iterrows(): code = row['ts_code']

weixin_44177216的博客 2897

AcWing 788.逆序对的数量

AcWing 788.逆序对的数量 题目描述 给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆序对;否则不是。 输入格式 第一行包含整数n,表示数列的长度。 第二行包含 n 个整数,表示整个数列。 数据范围 1≤n≤100000 输入样例 6 2 ...

TWF 256

hcaptcha无感验证码逆向实战:从接口分析到环境补全

本文详细解析了hcaptcha无感验证码的逆向实战过程。通过分析核心接口与加密逻辑,重点介绍了采用环境补全策略来模拟真实浏览器环境,从而绕过验证码检测。文章提供了从接口抓包、剖析hsw.js加密核心到使用Node.js搭建模拟环境的完整步骤,为自动化操作提供了一种稳健的解决方案。

weixin_29324401的博客 1151

AcWing788逆序对的数量

题目链接:https://www.acwing.com/problem/content/790/

a695484357的博客 196

YOLO26改进 - 注意力机制 | ParNet并行子网络:多分支协同优化特征表达,增强模型判别能

本文介绍了ParNet注意力机制及其在YOLO26中的应用。ParNet注意力通过并行子网络结构,将网络层组织成多个子网络并行处理输入特征,降低了传统注意力机制在处理长序列时的计算复杂度。该机制采用VGG风格的块和特征融合策略,具有低深度高性能、参数效率高、可扩展性强和并行化能力好等创新点。我们将ParNet注意力引入YOLO26,在检测头部分应用该机制。通过实验训练改进后的模型,有望提升YOLO26在目标检测任务中的性能。

魔改工程师的博客 443

鸿蒙系统开发工程师:核心技术解析与深度面试指南

摘要: 鸿蒙系统开发工程师需具备底层驱动开发、系统移植优化及分布式架构能力。核心职责包括硬件适配(Bootloader、内核移植、HDF驱动开发)、性能调优(启动加速、功耗管理)及稳定性保障。技术要求涵盖C/C++编程、Linux内核机制、鸿蒙架构(HDF、分布式服务)及ArkTS/ArkUI基础。面试重点考察系统移植流程(如ARM板适配)、驱动开发(I2C/Display)、性能优化手段及内存/同步机制的应用。

郑伟强dev的专栏 430

AcWing 788. 逆序对的数量(C++算法)

AcWing 788. 逆序对的数量 1、题目(来源于AcWing): 给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆序对;否则不是。 输入格式 第一行包含整数n,表示数列的长度。 第二行包含 n 个整数,表示整个数列。 输出格式 输出一个整数,表示逆序对的个数。 数据范围 1≤n≤100000 输入样例: 6 2 3 4 5 6 1 输出样例: 5 2、基本思想:

YSA__的博客 539

实时系统vxWorks - 虚拟机环境搭建

概述VxWorks 操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。良好的持续发展能力、高性能的内核以及友好的...

不只会拍照的程序猿 7850

Acwing---788.逆序对的数量

合并过程中计算逆序对:在合并两个已排序的子数组时,如果发现逆序对(即 arr[i] > arr[j]),则将逆序对的数量递增为第一个子数组中剩余的元素数量(即。一种高效的计算逆序对的方法是使用修改后的归并排序算法。基本思想是将数组分割为较小的子数组,递归地对它们进行排序,然后在合并过程中计算逆序对。然后,将子数组按照排序顺序合并回来,同时在合并过程中计算逆序对。合并,总逆序对数量 = 1(因为 2 > 1 且 且 2 后面没有其他元素)的整数数列,请你计算数列中的逆序对的数量。,数列中的元素的取值范围。

qq_51251599的博客 1291

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

AcWing 788. 逆序对的数量【归并排序应用】

AcWing 788. 逆序对的数量【归并排序应用】

Derrickhang的博客 825

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

acwing——788. 逆序对的数量

788. 逆序对的数量 给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆序对;否则不是。 输入格式 第一行包含整数n,表示数列的长度。 第二行包含 n 个整数,表示整个数列。 输出格式 输出一个整数,表示逆序对的个数。 数据范围 1≤n≤1...

suxiaorui的博客 1924

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

[AcWing]788. 逆序对的数量(C++实现)

[AcWing]788. 逆序对的数量(C++实现)1. 题目2. 读题(需要重点注意的东西)3. 解法4. 可能有帮助的前置习题5. 所用到的数据结构与算法思想6. 总结 1. 题目 2. 读题(需要重点注意的东西) 思路:归并排序,通过两个指针指向的值比较大小完成调整两个区间段的值。在每次判断大小时,输出逆序对的数量即可。 3. 解法 ---------------------------------------------------解法-------------------------------

cloud的博客 834

AcWing 788 逆序对的数量

题目描述: 给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆序对;否则不是。 输入格式 第一行包含整数n,表示数列的长度。 第二行包含 n 个整数,表示整个数列。 输出格式 输出一个整数,表示逆序对的个数。 数据范围 1≤n≤100000 ...

昂昂累世士的博客 367

AcWing788.逆序对的数量

C++分治问题(归并排序)

袖里青蛇胆气粗的博客 1153
上一篇: leetcode---第 250 场周赛 5815. 扣分后的最大得分
下一篇: 795. 前缀和 ---acwing
郭晋龙
博客等级 码龄6年 940粉丝 449原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭晋龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值