首页 > 其他分享 >788. 逆序对的数量

788. 逆序对的数量

时间:2024-07-24 14:07:17浏览次数:16  
标签:sort 数列 int 788 mid merge 数量 逆序


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

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

输入格式

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

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

输出格式

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

数据范围

1 ≤ n ≤ 100000 1≤n≤1000001≤n≤100000

输入样例:

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

5
1
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[100005],cnt,tmp[100005];
int n;
void merge_sort(int l,int r){
if(l>=r) return;
int mid=(l+r)>>1;
merge_sort(l,mid);
merge_sort(mid+1,r);
int i=l,j=mid+1,k=0;
while(i<=mid&&j<=r){
if(a[i]<=a[j]) tmp[k++]=a[i++];
else{
cnt+=(mid-i+1);
tmp[k++]=a[j++];
}
}
while(i<=mid) tmp[k++]=a[i++];
while(j<=r) tmp[k++]=a[j++];
for(int i=l,j=0;i<=r;i++,j++){
a[i]=tmp[j];
}
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%lld",&a[i]);
merge_sort(0,n-1);
cout<<cnt;
return 0;
}
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/hebtu_Kangweiqi/article/details/109124329

标签:sort,数列,int,788,mid,merge,数量,逆序
From: https://www.cnblogs.com/YJH6994/p/18320792

相关文章

  • 求细胞数量
    求细胞数量洛谷查看题目题目描述一矩形阵列由数字000到999组......
  • 三种语言实现计算逆序对的数量(C++/Python/Java)
    题目给定一个长度为......
  • 我们如何从 pickle 文件中获取注释,这些注释将告诉我们 pickle 文件中存储的对象数量和
    有人在Pickle文件中存储了多个对象。现在我想取消该文件,但我如何知道Pickle文件中存储了多少对象?是否有任何注释或其他内容可供我们获取有关Pickle文件的信息?你不能直接从pickle文件本身获取注释来说明存储了多少个对象或这些对象的类型。Pickle文件不存储此类元数......
  • 分治法 -----归并排序、逆序对、最大子数组和
    一分治法概念分治(divide-and-conquer),顾名思义分而治之。分治的核心是将原问题分解为同类型的规模更小的子问题,子问题往往可以求解或者求解比较简单,通过整合子问题的解得到原来问题的解。分治的过程可以用如下图来表示:由上述图示可发现整个分治过程是一颗树,而且子问题的处......
  • 我希望模型生成准确数量的令牌,不多也不少
    有什么技巧或最佳实践可以实现这一目标吗?我尝试过几次提示有没有可以执行此操作的开源模型?我尝试过几次提示,但没有给出最佳结果。先感谢您很难保证模型生成的令牌数量完全准确。但是,可以使用一些技巧和最佳实践来更接近所需的长度:技巧使用专门的......
  • 如何确定SQLAlchemy在用户请求期间执行的查询数量?
    我搜索了互联网,没有找到一个非常简单问题的答案。我有一个简单的Web应用程序(由web.py提供支持),它使用SQLAlchemy0.7.8+psycopg2,所以sqltap对我不起作用。因此,我可以在引擎中启用echo=True或对保存在threadlocal中的当前会话执行任何操作。计算查询数......
  • 代码随想录算法训练营第33天 | 贪心4:452. 用最少数量的箭引爆气球、435. 无重叠区间
    代码随想录算法训练营第33天|贪心4:452.用最少数量的箭引爆气球、435.无重叠区间、763.划分字母区间452.用最少数量的箭引爆气球https://leetcode.cn/problems/minimum-number-of-arrows-to-burst-balloons/description/代码随想录https://programmercarl.com/0452.用最......
  • 代码随想录day 31 用最少数量的箭引爆气球 | 无重叠区间 | 划分字母区间
    用最少数量的箭引爆气球用最少数量的箭引爆气球解题思路先根据数组中的第一个参数进行排序,之后通过记录最小右区间来判断是否重叠或者进入下个重叠区。贪心的思想是有重叠就尽可能地进行重叠,从而达到局部最优知识点重叠区间,贪心心得学会了如何判断和找寻重叠区间的方法无......
  • LeetCode 1788. 最大化花园的美观度
    1788.最大化花园的美观度有一个花园,有 n 朵花,这些花都有一个用整数表示的美观度。这些花被种在一条线上。给定一个长度为 n 的整数类型数组 flowers ,每一个 flowers[i] 表示第 i 朵花的美观度。一个花园满足下列条件时,该花园是有效的。花园中至少包含两朵花。第......
  • GitHub Star 数量前 12 的开源无代码工具
    相关文章:GitHubStar数量前15的开源低代码项目在本篇文章中,我们将探索12款在GitHub上星级排名前列的开源无代码工具。每款工具都旨在简化和加速开发过程,但各自侧重于不同的应用场景。从动态表单生成的Formily,到高度可定制的NocoBase用于复杂业务系统;从Mitosis支持......