poj 4086:DNA排序
题目
描述
现在有一些长度相等的DNA串(只由ACGT四个字母组成),请将它们按照逆序对的数量多少排序。
逆序对指的是字符串A中的两个字符A[i]、A[j],具有i A[j] 的性质。如字符串”ATCG“中,T和C是一个逆序对,T和G是另一个逆序对,这个字符串的逆序对数为2。
输入
第1行:两个整数n和m,n(0
第2至m+1行...
分类:
编程语言 时间:
2014-10-30 15:17:37
阅读次数:
392
莫队算法,离线回答询问,按一定大小(sqrt(n*log(n))左右)将答案分块,按 ①左端点所在块②右端点 双关键字排序。然后暴力转移。转移的时候用树状数组。O(n*sqrt(n)*log(n))。注意:①在一列数的后面添加一个数,逆序对数会增加 数列中比它大的数的个数。②在一列数的后面删除一个数...
分类:
编程语言 时间:
2014-10-29 12:28:39
阅读次数:
273
题目大意:给定一个序列,每次选择一个位置,把这个位置之后所有小于等于这个数的数抽出来,排序,再插回去,求每次操作后的逆序对数
首先我们每一次操作 对于这个位置前面的数 由于排序的数与前面的数位置关系不变 所以这些数的逆序对不会变化
对于这个位置后面比这个数大的数 由于改变位置的数都比这些数小 所以这些数的逆序对不会变化
说到底就是排序的数的逆序对数改变了 以这些数开始的逆序对没有了
于是就...
分类:
编程语言 时间:
2014-10-23 10:45:25
阅读次数:
209
我们可以通过预处理,在O(n)之内,算出f(1, i, a[i]) 定义数组为l[i], 算出f(j, n, a[j]) 定义数组为r[i]。
题目就转化为:求出 l[i] > r[j] (i < j)。
本质上,就是一个求逆序对的做法,用树状数组。...
分类:
其他好文 时间:
2014-10-23 00:09:08
阅读次数:
249
题目如下题目描述 Description涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度。现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:,其中 ai表示第一列火柴中第 i 个火柴的高度,bi表示第二列火柴中第 i 个火柴的高度。每列火柴中相邻两根火柴的...
分类:
其他好文 时间:
2014-10-22 17:51:36
阅读次数:
385
题目大意:给定一个序列,m次交换两个数,求初始逆序对数及每次交换后的逆序对数
首先离散化,分块,对于每块建立一个树状数组,保存这个块中的所有元素
然后对于每个询问(x,y) (x
a[i]
a[i]>a[x] ++ans
a[i]
a[i]>a[y] --ans
然后对于块中的树状数组处理,块外的暴力
注意此题元素有重复 亲测可信
RANK5吓尿0.0 为何块套树要比树套树还快…...
分类:
编程语言 时间:
2014-10-22 14:42:48
阅读次数:
286
http://acm.hdu.edu.cn/showproblem.php?pid=4911
给定一个序列,有k次机会交换相邻两个位置的数,问说最后序列的逆序对数最少为多少。
实际上每交换一次能且只能减少一个逆序对,所以问题转换成如何求逆序对数。
归并排序或者树状数组都可搞
树状数组:
先按大小排序后分别标号,然后就变成了求1~n的序列的逆序数,每个分别查询出比他小的用i减,...
分类:
编程语言 时间:
2014-10-21 21:45:22
阅读次数:
266
考虑每次删除pos位置一个数x后,所造成的的影响就是,逆序对的个数少了在1~pos-1中大于x的数的个数加上pos+1~n中小于x的数的个数。那么我们需要的操作就只有查询区间内比某数大(小)的个数。↑,分块经典操作,每个块里维护一个有序表。由于有删除,最好每个块用一个vector。对于原数列怎么办呢...
分类:
其他好文 时间:
2014-10-16 20:36:13
阅读次数:
214
题目大意:有两排城市,这两排城市之间有一些路相互连接着,求有多少条路相互交叉。
思路:把所有的路先按照x值从小到大排序,x值相同的按照y值从小到大排序,然后插入边的时候,先找有多少比自己y值小的,这些边的x值一定比自己大,也就是一个逆序对,然后统计起来。记得答案要用long long (__int64)
CODE:
#include
#include
#inclu...
分类:
编程语言 时间:
2014-10-16 11:30:12
阅读次数:
218
https://vijos.org/p/1757有时候自己sb真的是不好说。。。我竟然想了半天都没想到这个转移。我是有多傻。。。。我们设f[i][j]表示1~i的排列且逆序对恰好是j的方案数。显然我们只需要将i放进i-1排列中就行了。而且发现i始终大于i-1那么就好做了,我们只要将所有i放到i-1序...
分类:
其他好文 时间:
2014-10-14 06:56:47
阅读次数:
214