题目大意:
给你一个包含N个整数的序列,只能通过交换相邻的数字,最终变为升序顺序,问:最少需要多少次交换。
思路:
其实就是问冒泡排序的交换次数。其实就是求原序列的逆序数。用归并排序、线段树、树状数组都可以做。
但是如果用线段树和树状数组来做的话,因为元素个数是500000,但是元素值范围却是999999999,需
要先离散化。这里用间接排序的方法。用一个数组Arr[]存放原序列的值,另一个数组Id[]存放原序列编号
(1~N),对Id[]按Arr[]元素值的从大到小排序,得到Arr[]数组元素的相对大小...
分类:
编程语言 时间:
2015-05-13 16:50:31
阅读次数:
141
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4911题目大意:最多可以交换K次,就最小逆序对数解题思路:逆序数定理,当逆序对数大于0时,若akright[j]出现逆序情况时,cnt+=(leftnum-i),即当前right[j]元素和left[i]...
分类:
编程语言 时间:
2015-04-29 11:33:09
阅读次数:
159
题目大意:
有N头奶牛排成一排。每头奶牛都有一个唯一的"坏脾气"值。坏脾气的范围为1~100000。现在将
奶牛重新排序,使奶牛按照坏脾气增加的顺序排列。所有的奶牛都可以相互交换位置。但是交换脾
气值为X,Y的两头奶牛,需要的时间是X+Y。现在问:将奶牛重新排列需要的最短时间是多少。
思路:
这道题就是给你一个N个元素的序列,求这个序列中所有逆序数的和。所以,对于值为a的第i个元素,
除了知道前i个元素里比a大的元素个数之外,还得知道前i个元素里比a大的元素的和。建立结构体树
状数组,一个变量来记录比a小...
分类:
编程语言 时间:
2015-04-28 18:28:03
阅读次数:
163
题目大意:
求把一个具有N个不同元素的序列通过交换两个相邻的元素转换成升序序列需要进行的交换次数
是多少。
例如:1 2 3 5 4,只需要交换5和4,交换次数为1次。
思路:
典型的求逆序数题。其实可以直接暴力过。但是用树状数组效率比较高。对于值为a第i个元素,
需要交换次数为前i个元素中大于a的元素个数,即逆序数。
用树状数组来做,数组Tree[i]表示数字i是否在序列中出现过,如果数字i已经存在于序列中,
Tree[i] = 1,否则Tree[i] = 0。按序列从左到右将值为a的元素当作下标为a,...
分类:
编程语言 时间:
2015-04-27 23:45:36
阅读次数:
193
楼主又来~(≧▽≦)/~啦啦啦,科研,就是要这么一鼓作气。额,其实楼主的老本行是推公式啊,做这些算法题,其实是楼主在偷懒。额,话不多说了,快请出我们今天的主角吧!还是关于数组的-数组循环移位。下面我们来看下题目的要求。题目要求:设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N)O(N),且只允许使用两个附加变量。题目解答我们来自己给个例子,来帮助自己思考。如数组为[1, 2...
分类:
编程语言 时间:
2015-04-13 19:03:04
阅读次数:
199
一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,
所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序。
解析:可以将整个字符数组进行排序,然后将整个数组逆序,然后a-z、A-Z、0-9在分别逆序就可以了
//一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所...
分类:
编程语言 时间:
2015-04-11 09:02:41
阅读次数:
156
题意查询给定[L, R]区间内 逆序对数 ==k的子区间的个数。我们只需要求出 子区间小于等于k的个数和小于等于k-1的个数,然后相减就得出答案了。对于i(1≤i≤n),我们计算ri表示[i,ri]的逆序对数小于等于K,且ri的值最大。(ri对应代码中的cnt数组)显然ri单调不降,我们可以通过用两...
分类:
编程语言 时间:
2015-04-01 19:20:28
阅读次数:
234
题意:求n个数的逆序对数,可以交换k次相邻的,所以求出原序列的逆序对后减去k即可。
思路:求逆序对有两种方法,归并排序和树状数组。逆序对的几种求法...
分类:
编程语言 时间:
2015-04-01 09:42:24
阅读次数:
296
hdu 5193 分块 树状数组 逆序对
题意:
给出n个数,a1,a2,a3,...,an,给出m个修改,每个修改往数组的某个位置后面插入一个数,或者把某个位置上的数移除。求每次修改后逆序对的个数。
限制:
1
思路:
插入和删除用分块来处理,块与块之间用双向链表来维护,每一块用树状数组来求小于某个数的数有多少个。
外层可以使用分块维护下标,这样添加和删除元素的时候,也很...
分类:
编程语言 时间:
2015-03-31 14:50:01
阅读次数:
190
历届试题 小朋友排队
时间限制:1.0s 内存限制:256.0MB
问题描述
n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。
每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是0。
如果某个小朋友第一次被要求交换,则他的不高兴程度增加1,如果第二次要求他...
分类:
编程语言 时间:
2015-03-19 22:03:47
阅读次数:
215