题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 输入描述: 题目保证输入的数组中没有的相同的数字 数据范围: 对于%50的数据,siz ...
分类:
编程语言 时间:
2019-07-04 12:55:26
阅读次数:
109
/* 排除掉所有不可能的情况,剩下的就是可行的 1.数的数量不相同 2.对任意一个区间进行排序,等价于可以交换任意逆序对, 那么从1到n扫描b数组,判断是否可以将a数组中等于b[i]的值所在的位置j交换到位置i,等价于判断区间a[i,j]是否存在 #include using namespace s... ...
分类:
其他好文 时间:
2019-07-01 17:04:04
阅读次数:
76
一. Friend Cycle 用一个数组存储root结点,采用压缩路径的方法,查找的时间复杂度为O(1), 合并的时间复杂度为O(1) 二. 逆序对 ...
分类:
编程语言 时间:
2019-06-29 22:17:09
阅读次数:
102
"题目链接" 题意 给定1个长度为2n的01数组。你可以交换相邻的元素。询问最少交换次数,使得前n个元素组成的子数组中的逆序对个数等于后n个元素组成的子数组中的逆序对个数。$1 \leq n\leq 10^5$ 题解 普通的数组中,数的种类繁多,逆序对的求解及动态维护是很复杂的情况。 考虑利用 01 ...
分类:
其他好文 时间:
2019-06-29 22:01:50
阅读次数:
187
c++ 求逆序对 例如数组(3,1,4,5,2)的逆序对有(3,1)(3,2)(4,2)(5,2)共4个 逆序对就是左边的元素比右边的大,那么左边的元素和右边的元素就能产生逆序对 代码跟归并排序差不多 代码 c include using namespace std; int a[100]; int ...
分类:
编程语言 时间:
2019-06-27 21:51:51
阅读次数:
176
数值统计:任意给定一个集合$a$,如果用$t[val]$保存数值$val$在集合中出现的次数,那么数组$t$在$[l,r]$上的区间和(即$\sum_{i=l}^{r} t[i]$)就表示集合$a$中范围在$[l,r]$内的数有多少个。 我们可以在集合$a$的数值范围上建立一个树状数组,来维护$t$ ...
分类:
编程语言 时间:
2019-06-25 17:21:31
阅读次数:
215
统计逆序对的两种解法 归并排序(mergeSort) 逆序对定义 $ia[j]$,假设我们分别使得通过mergeSort使得左右半边有序 即$a[1]...a[mid]$ 递增, $a[mid+1]....a[n]$递增,我们需要通过merge操作,完成整个的排序和新增逆序对的计数,较小值出现在左半 ...
分类:
其他好文 时间:
2019-06-24 19:43:16
阅读次数:
119
树状数组套线段树,用动态开点线段树。此类就这一题放在这吧。 程序写的太丑了,不要介意。 用cdq分治更好。 ...
分类:
其他好文 时间:
2019-06-11 19:41:46
阅读次数:
106
题意:给一棵n(1≤n≤200000个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少。 算法见注释 cpp include define ll long long using namespace std; const int N=5e6+6; int n,tot; int lc ...
分类:
其他好文 时间:
2019-06-07 22:35:33
阅读次数:
109
题目描述 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数。若对于任意一个由1~n自然数组成的数列,可以很容易求出有多少个逆序对数。那么逆序对数为k的这样自然数数列到底有多少个? 输入输出格式 输入格式: 第一行为两个整数n,k。 输出格式: 写入一个整数,表示符合 ...
分类:
其他好文 时间:
2019-05-26 17:54:27
阅读次数:
102