当前位置:网站首页>逆序对的数量
逆序对的数量
2022-08-04 22:33:00 【Ding Jiaxiong】
题目
给定一个长度为 n 的整数数列,请你计算数列中的逆序对的数量。
逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i<j 且 a[i]>a[j],则其为一个逆序对;否则不是。
输入格式
第一行包含整数 n,表示数列的长度。
第二行包含 n 个整数,表示整个数列。
输出格式
输出一个整数,表示逆序对的个数。
数据范围
1≤n≤100000,
数列中的元素的取值范围 [1,109]。
输入样例:
6
2 3 4 5 6 1
输出样例:
5
思路分析
题解
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
typedef long long LL;
const int N = 100010;
int n;
int q[N],tmp[N];
LL merge_sort(int l , int r){
if(l >= r){
return 0;
}
int mid = (l + r) / 2;
LL res = merge_sort(l , mid) + merge_sort(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 ++];
res += mid - i + 1;
}
}
while(i <= mid){
tmp[k ++] = q[i ++];
}
while(j <= r){
tmp[k ++] = q[j ++];
}
for(int i = l , j = 0 ; i <= r; i++ , j ++){
q[i] = tmp[j];
}
return res;
}
int main(){
cin >> n;
for(int i = 0; i < n; i++){
cin >> q[i];
}
cout << merge_sort(0 , n - 1) << endl;
return 0;
}
边栏推荐
- 质量管理大师爱德华·戴明博士经典的质量管理14条原则
- The upgrade and transformation plan of the fortress machine for medium and large commercial banks!Must see!
- rk3399-9.0一级二级休眠
- 【3D建模制作技巧分享】Maya模型如何导入zbrush
- How to make a video gif?Try this video making gif artifact
- How to right use of WebSocket in project
- rk3399 驱动屏参的几种方式
- 正则表达式绕过
- 祝福一路顺风
- 快速web开发框架——learun framework
猜你喜欢
随机推荐
PowerBI scripture series
[Linear Algebra 02] 2 interpretations of AX=b and 5 perspectives of matrix multiplication
PHP(3)
The Record of Reminding myself
Redisson
OC-归档(序列化)(了解的不多 没细看)
rk3399-0.0 svc命令
VSCode - common shortcut keys (continuous recording
视频gif如何制作?试试这个视频制作gif神器
One trick to cure pycharm DEBUG error UnicodeDecodeError: 'utf-8' codec can't decode
PowerBI真经连续剧
Rt-thread [二] 系统初始化流程
Deep Learning RNN Architecture Analysis
Detailed usage of LocalDateTime
剑指Offer | 数值的整数次方
基于事实的讨论
备战9月,美团50道软件测试经典面试题及答案汇总
【3D建模制作技巧分享】ZBrush如何设置笔刷快捷键
字节跳动秋招提前批高频面试问题汇总!(内附答案!)
Autowired autowiring