摘要: treap的讲解网上的版本很多, 这列就不在缀余了,这里主要是讲一下treap中涉及到记录左右儿子个数的旋转,删除,插入:首先是插入:插入这列基本与裸的TREAP一样,只需要加两句话即可:下面就是treap的旋转:其实只要正确理解旋转的定义就可以了.下面就以右旋为例(其实左右旋到底哪个是哪个我也不是很清楚,不过只要记住操作就可以了)在右旋中,因为右儿子的随机关键字小于父节点(这里以小根堆为例),因... 阅读全文
posted @ 2010-11-11 16:47 forever zsz 阅读(660) 评论(1) 推荐(1) 编辑
摘要: 这道题是一个典型的区间类动态规划,与之类似的还有rqnoj的关灯问题~这种题目的解法通常比较单一,但是比较难想出正确的解法,下面就是我的解法:假设此时已经安慰好了第i个MM和第j个MM及其之间的所有MM。如果此时站在第i个MM所在的位置,用f[i,j,0]表示之后需要消耗的最小RP;如果此时站在第j个MM所在的位置,用f[i,j,1]表示在此之后需要消耗的最小RP。这里通过记忆化搜索实现下面附上核... 阅读全文
posted @ 2010-11-17 09:22 forever zsz 阅读(402) 评论(0) 推荐(0) 编辑
摘要: 对于最长不下降子序列的求解,朴素的解法是N^2的,也可以用单调队列优化,从而降时间复杂度为Nlog(n).涉及到方案数的输出时,只需要降长度为1的最长XX子序列的方案数赋成1,其他的长度的方案数均由前一个长度的方案推出.如下图所示:首先用朴素的最长非降子序列的方法求出每一个在最优序列中的位置: 建立如下的表值的大小: 68 69 54 64 68 64 70 67 78 62 98 87在... 阅读全文
posted @ 2010-11-12 14:22 forever zsz 阅读(1364) 评论(0) 推荐(0) 编辑
摘要: 区间染色问题:是指在给定的区间内多次进行染色,染色顺序靠后的可以覆盖前面的颜色,问最终区间会被染成多少种颜色.下面给出Byvoid大牛出的一道模拟题,题目数据量极大,很难使用一般的思路AC掉。题目描述:自从诺莫瑞根陷落以后,侏儒们一直寄居在铁炉堡中。大机械师卡斯派普花了不少钱来悬赏勇士们去诺莫瑞根替他取回一些卡片,现在他已经有了一大堆彩色穿孔卡片。但是这些卡片都是残缺不全的,有的甚至还是无效的,想... 阅读全文
posted @ 2010-11-11 15:05 forever zsz 阅读(2152) 评论(1) 推荐(0) 编辑
摘要: 康托展开康托展开就是一种特殊的哈希函数,它的使用范围是对于n个数的排列进行状态的压缩和存储,例如要对9的全排列进行判重.没有必要开一个10^9的数组,同时内存也不允许开到那么大的数组.对此,有人提出了优化,即对于一个n的排列数,没有必要开到10^n,因为在一个排列中每个数只出现一次,所以只要前n-1位确定了,前N位就确定了.但是以上的想法仍不是可行的,因为N可以很大,例如15,所以便引入了康托展开... 阅读全文
posted @ 2010-11-10 19:25 forever zsz 阅读(1297) 评论(1) 推荐(1) 编辑
摘要: 题目链接http://www.tyvj.cn/ (P1356)现在,腾讯与360由于身处异地,非常迫切地想在最短的时间内相遇,然后干一架。但是由于双方的技术员都在努力地编程序想干掉对方,所以他们希望你来帮他们找到一个最好的方案使得相遇的时间最短。   在此我们定义"相遇"为:两个人皆在同一个有编号的城市上就可以了,并且这两个人均可以站在原地等另外一个人。也就是说,在这里我们不考虑两人在路中间相遇。... 阅读全文
posted @ 2010-11-09 16:25 forever zsz 阅读(507) 评论(0) 推荐(0) 编辑
摘要: 对于组合数中要求C(N,M)的话,一般常用的方法就是对除号的上下分别进行质因子分解,但同样是质因子分解也可以有不同的解法.下面给出一种较快的方法:将(n!)质因数分解的算法(注意是直接分解(n!),而不是将(1,2,3...n)一项一项分解)如果k是一个质数,f(k)表示里质因数K的个数f(k)=n/k+n/(k*k)+n/(k+k+k)+...n/(k^m);其中m是使n/(k^m)是正数的最大... 阅读全文
posted @ 2010-11-08 20:02 forever zsz 阅读(521) 评论(0) 推荐(0) 编辑
摘要: http://www.tyvj.cn/(p1035)刚看到的时候想到要用DFS做,可是那数据量太大~~看完题解发现是一道匹配的题目,具体思路就是把平时的一维的二分图匹配给改成二维的,另外开两个match数组,分别记录横纵坐标.废话少说,直接看代码: 阅读全文
posted @ 2010-11-08 07:40 forever zsz 阅读(548) 评论(1) 推荐(1) 编辑
摘要: 对有根树T进行DFS,将遍历到的结点按照顺序记下,我们将得到一个长度为2N – 1的序列,称之为T的欧拉序列F每个结点都在欧拉序列中出现,我们记录结点u在欧拉序列中第一次出现的位置为we(u)例如下面图片中的一棵树:欧拉序列(QQ):1 2 5 2 6 2 1 3 1 4 1深度序列(DP): 1 2 3 2 3 2 1 2 1 2 1根据DFS的性质,对于两结点u、v,从pos(u)... 阅读全文
posted @ 2010-11-07 18:45 forever zsz 阅读(487) 评论(0) 推荐(1) 编辑
摘要: 问题是求区间最值问题。你当然可以写个O(n)的(怎么写都可以吧=_=),但是万一要询问最值1000000遍,估计你就要挂了。这时候你可以放心地写一个线段树(前提是不写错)应该不会挂。但是,这里有更简单的算法,就是ST算法,它可以做到O(nlogn)的预处理,O(1)地回答每个询问。来看一下ST算法是怎么实现的(以最大值为例):首先是预处理,用一个DP解决。设a[i]是要求区间最值的数列,f[i,j... 阅读全文
posted @ 2010-11-07 14:44 forever zsz 阅读(466) 评论(0) 推荐(0) 编辑