参考博客:https://www.cnblogs.com/chengxiao/p/6194356.html sort不稳定。归并排序是较为稳定的一种排序算法 复杂度:nlogn 本排序的一个应用:HDU 4911 求逆序对数量:http://acm.hdu.edu.cn/showproblem.ph ...
分类:
编程语言 时间:
2020-05-24 19:19:03
阅读次数:
56
LINK: "5.15 T2" 个人感觉生成函数更无脑 容斥也好推的样子. 容易想到每次放数和数字的集合无关 所以得到一个dp f[i][j]表示前i个数字 逆序对为j的方案数. 容易得到转移 使用前缀和优化即可。 进一步的可以设出其生成函数 对于第i次放数字 生成函数为$F(x)=1+x^1+x^ ...
分类:
其他好文 时间:
2020-05-17 15:59:35
阅读次数:
55
https://leetcode-cn.com/problems/shortest-unsorted-continuous-subarray/ solution 1 class Solution { public: int findUnsortedSubarray(vector<int>& nums ...
分类:
其他好文 时间:
2020-05-15 15:41:06
阅读次数:
64
考虑用分块解决这个题,一次交换对当前逆序对个数的影响是,加上两倍的在区间$[l+1,r 1]$中比$a_r$小的元素个数,减去两倍的在区间$[l+1,r 1]$中比$a_l$小的元素个数,再根据$a_l$和$a_r$的大小关系决定这两个位置对答案的影响。 可以用$vector$来维护每个块内元素有序 ...
分类:
其他好文 时间:
2020-05-14 01:13:53
阅读次数:
59
官方解法带视频讲解,推荐先看视频再来看本文的讲解 https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof/solution/shu-zu-zhong-de-ni-xu-dui-by-leetcode-solution/ 采用归并 ...
分类:
编程语言 时间:
2020-05-10 01:08:20
阅读次数:
82
题目 https://www.luogu.com.cn/problem/P1908 题目分析 树状数组的使用原因 可以开一个数组c[maxn],来记录前面数据的出现情况,初始化为0;当数据a出现时,就令c[a]=1。这样的话,欲求某个数a的逆序数,只需要算出在当前状态下c[a+1,maxn]中有多少 ...
分类:
编程语言 时间:
2020-05-04 21:42:08
阅读次数:
95
求解逆序对问题,首先基础方法就是归并排序,高阶方法可以用树状数组。 首先知道什么叫逆序对:对于一个序列$a$,如果$ia[j]$,则$a[i]$和$a[j]$构成逆序对。归并排序在 合并 的时候可以将求解逆序对作为子问题来求解,如果$a[p1]a[p2]$,那$p1 mid$的所有的值都比$a[p2 ...
分类:
编程语言 时间:
2020-05-03 23:10:07
阅读次数:
118
"Enemy is weak" 求序列 $a\{n\}$ 中的三元逆序对数量。 数据范围:$3\le n\le 1e6$。 这题真是一道又好又水的题,可是我看别人的题解做法真是玄学难懂,于是蒟蒻要写一篇简单易懂的。 考虑到 二元逆序对 的做法: 离散化后动态维护一个权值树状数组。 其中对于每个当做逆 ...
分类:
其他好文 时间:
2020-05-01 12:57:30
阅读次数:
71
leetcode 面试题51. 数组中的逆序对 本质上就是归并排序,并在合并区间过程中统计交换的逆序对的数目 归并排序需要开o(n)的辅助空间 class Solution { public: int deal(vector<int>&nums,vector<int>&tmp,int ll,int ...
分类:
编程语言 时间:
2020-04-26 12:34:31
阅读次数:
80
class Solution { public int reversePairs(int[] nums) { int len = nums.length; if(len<2){ return 0; } int[] copy = new int[len]; for(int i=0;i<len;i++) ...
分类:
编程语言 时间:
2020-04-25 01:23:49
阅读次数:
82