题目地址:HDU 1394
这题可以用线段树来求逆序数。
这题的维护信息为每个数是否已经出现。每次输入后,都从该点的值到n-1进行查询,每次发现出现了一个数,由于是从该数的后面开始找的,这个数肯定是比该数大的。那就是一对逆序数,然后逆序数+1.最后求完所有的逆序数之后,剩下的就可以递推出来了。因为假如目前的第一个数是x,那当把他放到最后面的时候,少的逆序数是本来后面比他小的数的个数。多的逆序数...
分类:
其他好文 时间:
2014-08-09 00:18:06
阅读次数:
250
树状数组求逆序数
样例输入:
3
1 2 3
4
4 3 2 1
样例输出:
0
6
#include
#include
#include
#include
using namespace std;
int a[10005];
int n;
int lowbit(int t)
{
return t&(-t);
}
void Update(int...
分类:
其他好文 时间:
2014-08-08 18:20:56
阅读次数:
250
HDU 4911 Inversion(基本算法-排序)
题目大意:
有n个数,问你经过K次交换后的逆序数最少多少个?
解题思路:
根据排序的思想,每一步都能减少1个逆序数,所以K步之多减少K个逆序数。
因此,这题转化为了求逆序数,数据量略微大,用归并排序即可。...
分类:
其他好文 时间:
2014-08-08 12:58:36
阅读次数:
228
题目链接:点击打开链接
题意是求 ia[j]>a[k] 的对数
如果只有2元组那就是求逆序数的做法
三元组的话就用一个树状数组x表示 数字i前面有多少个比自己大的个数
然后每次给这个y数组求和,再把x中>a[i]的个数存入y中即可
#include
#include
#include
#include
#include
#include
#include
#incl...
分类:
其他好文 时间:
2014-08-08 02:04:59
阅读次数:
207
点击打开链接
Inversion
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 1106 Accepted Submission(s): 474
Problem Description
bob...
分类:
其他好文 时间:
2014-08-07 23:16:55
阅读次数:
306
经典的线段树求解逆序数问题。
运用了一个逆序数的性质,如果一个数从首位换到尾位,这其逆序数将减少y[i],增加n-y[i]-1。
举个例子说明,如果一个排列3 1 2 0 4本来三前面应该有三个数比他小的,但是现在3在首位,则说明3产生的逆序数有3个,而将3换到尾位后,就说明比3大的都在3前面了,所以此时3的逆序数有n-y[i]-1(5-3-1 = 1).
线段树的话,先建立一个空...
分类:
其他好文 时间:
2014-08-07 13:09:40
阅读次数:
178
解题报告算导上给了提示 用归并排序的代码进行修改来实现 思考后不难看出 归并排序的合并(merge)过程中 对数据进行了比较1)如果数组L 的当前某元素大于数组R的当前元素,那么 由于L数组是有序的(升序) 因此 L数组当前元素以及他后面的所有元素都与R数组构成逆序对2)我们的排序并不影响逆序对的数...
分类:
其他好文 时间:
2014-08-06 22:31:22
阅读次数:
451
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4911解题报告: 给出一个长度为n的序列,然后给出一个k,要你求最多做k次相邻的数字交换后,逆序数最少是多少?因为每次相邻的交换操作最多只能减少一个逆序对,所以最多可以减少k个逆序对,所以我们只要求出原来...
分类:
Web程序 时间:
2014-08-06 18:22:11
阅读次数:
375
1001:Inversion
模版题,求逆序数对。有多少逆序数对,就可以剪掉多少。
1003:Least common multiple
对于每一个子集,lcm为2的a的最大值次方*3的b的最大值次方。
所以我们只需要求出以某个b为b的最大值的时候,a的最大值的分布情况即可。
我们先把b从小到大排序。
对于某一个b,我门只需要求出之前出现过的a比当前a小的数量为x;
那么就可知对于这...
分类:
其他好文 时间:
2014-08-06 14:57:51
阅读次数:
214