逆序对相关的题目:
题目1: 逆序对模板题: https://www.acwing.com/problem/content/description/790/
题目2: 百练平台的重要逆序对:http://bailian.openjudge.cn/xly2018/E/
逆序对问题的处理方法:
1.(推荐): 分治法,归并排序的处理思路
2. 哈希+树状数组
注意: 个人比较推荐第一种逆序对的做法,比较具有普适性. 哈希+树状数组的做法在遇到一些特定的题目(e.g. 题目2)的时候会相对比较难以处理.
主要来讲一讲"分治法"
分治法的主要思路就是讲规模为n的问题拆分为左半部分和右半部分, 递归处理这两部分. 然后对这两部分进行合并(归并). 应用到逆序对中, 我们可以将整个序列的逆序对划分为以下3类:
1. 左半部分的逆序对
2. 右半部分的逆序对
3. 横跨两边的逆序对
其中1和2可以由递归函数处理得到,只需要考虑3如何统计.
常规的暴力统计的方法去统计3,复杂度是O(n^2). 复杂度高的原因: 没有充分利用序列信息.
注意到: 3是统计横跨两边的逆序对,与左半部分序列的内部顺序无关,右半部分同理.
事实上,我们可以规定我们的递归函数的副作用为: 对于一个序列,先做