(分治)逆序对问题

217 篇文章 13 订阅
本文探讨如何使用分治策略解决逆序对问题。在给定序列a1到an(n可达1e6)中,计算满足i<j且ai>aj的有序对数量。通过分析,在分治排序过程中,当右半部分的元素q进入临时空间时,左半部分从当前元素p到末尾的m个元素都大于q,因此为逆序对。在分治过程中累加这些逆序对,即可得到总数。
摘要由CSDN通过智能技术生成

题目:

给一列数a1,a2,…,an,求它的逆序对数,即有多少个有序对(i,j),使得i< j但ai>aj。n可以高达1e6

分析与解答

由于是从小到大进行合并操作,可以发现如果右半数组的元素q放入临时空间中,那么左半数组中当前元素p到末尾的元素m全部都是大于q的(左边所剩元素在区间[p,m)中,因此元素个数为m-p)此时满足右边下标大于左边,但是右边的数小于左边这一条件
所以只需在分治排序的基础上增加一个累加,对于q来说,它的逆序数有m-p个,那就累加上即可

#include<iostream>
using namespace std;
int cnt=0;
void
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

每天学点

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

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

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

打赏作者

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

抵扣说明:

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

余额充值