题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。分析:利用归并排序的思想,分成2部分,每一部分按照从大到小排序,然后比较左侧的a[i]和右侧的b[j]若a[i]>b[j],那么a[j]大于b[j]~b[right],...
分类:
编程语言 时间:
2015-07-15 14:54:59
阅读次数:
114
题目1348:数组中的逆序对时间限制:1 秒内存限制:32 兆特殊判题:否提交:2572解决:606题目描述:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。输入:每个测试案例包括两行:第一行包含一个整数n,表示数组中的元素...
分类:
编程语言 时间:
2015-07-15 13:04:03
阅读次数:
161
int InversePairs(int* data, int length)
{
if (data == NULL || length
return 0;
int *copy = new int[length];
for (int i = 0; i
copy[i] = data[i];
int count = InversePairsCore(data, copy, 0, le...
分类:
编程语言 时间:
2015-07-10 19:17:44
阅读次数:
113
数组中任取两个数字,如果前面的数字大于后面的数字称为一个逆序对如:1,2,1,2,1 有3个逆序对思路:知道O(N2)肯定是错的。开始想hash,试图找到O(n)的算法,想了很久,找不到。后来想到排序,用原数组与排好序的数组对比,我写的快排,还是不对。想了几个小时,无奈看答案,原来是用变形的归并排序...
分类:
编程语言 时间:
2015-07-10 00:20:27
阅读次数:
146
BZOJ 3295 [Cqoi2011]动态逆序对 树状数组套线段树...
分类:
编程语言 时间:
2015-07-09 16:22:22
阅读次数:
288
题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
解题思路:
第一种:直接求解
第二种:分析法...
分类:
编程语言 时间:
2015-07-05 09:32:55
阅读次数:
136
定义:对于一个给定的数列,如果有iAj,则称(i,j)为一逆序对.
要解决的问题是,给出一个数列,求出这个数列包含多少个逆序对。
例如,数组(3,1,4,5,2)的“逆序对”有,,共4个。
解题思路使用归并排序可以用O(nlogn)的时间解决统计逆序对个数的问题 .
逆序对数实质就是插入排序过程中要移动元素的次数。
归并的时候...
分类:
其他好文 时间:
2015-07-01 22:14:02
阅读次数:
203
题意:给出n个数,每次可以把第一个数挪到最后一个位置去,问这n种排列里面的最小逆序对数先把最开始的逆序对数求出来然后对于一个数a[i],比它小的数有a[i] - 1个,比它大的数有n - a[i]个所以把a[i]挪到数列的最末尾的时候, 相当于损失了a[i] - 1个逆序数,得到了n - a[i] ...
分类:
编程语言 时间:
2015-07-01 15:43:38
阅读次数:
123
题意:给出n个数,再给出q个询问,求L到R的逆序对的个数先自己写的时候,是每次询问都重新插入来求sum(r)-sum(l)果断T后来还是看了别人的代码----预处理一下,把所有可能的区间的询问都求出来(1000*1000), 然后询问就是O(1)了然后想自己这样写超时,是因为询问太多了---- 1 ...
分类:
编程语言 时间:
2015-06-28 17:01:17
阅读次数:
120
题意:给定一组数,q次查询(每次区间l~r),输出从a[l] 到a[r] 存在多少对逆序数。
分析:dp[l][r]表示从l~r的逆序数对数。首先算好dp[1][1..N]。
然后2~N枚举,每次计算从i开始的逆序对。dp[i][j]比dp[i-1][j]少了a[i-1]这个数的贡献。设一个累加器cnt。枚举i~N,若a[i-1]和a[j]构成逆序数,则cnt++;
最后dp[i][j]=d...
分类:
其他好文 时间:
2015-06-28 09:56:18
阅读次数:
124