随笔分类 -  算法模板

摘要:实现功能——实现对于不同字符串以及之前出现过的字符串的识别,对于单个长度为L的字符串,复杂度为O(L);代码不难懂,直接上(在识别字符串方面,个人觉得其好处远远大于hash识别——1.理论上都是O(L) 2.哈希弄不好撞车撞一大串,尤其是哈希策略不太好的时候,而这个绝对不可能撞,严格的O(L) 3.... 阅读全文
posted @ 2015-01-21 23:57 HansBug 阅读(237) 评论(0) 推荐(0) 编辑
摘要:实现功能——输入N个点,求出按此顺序围成的图形的面积原理:其实就是个向量的叉积运算(详见UASCO-nocow:计算几何),注意二维的叉积是个很逗的东西,叉积这玩意本身就来自于三维向量(HansBug:临睡觉了,水一发呵呵哒,额。。。phile犇不在好寂寞TT) 1 var 2 i,j,k,l... 阅读全文
posted @ 2015-01-20 23:50 HansBug 阅读(331) 评论(0) 推荐(0) 编辑
摘要:实现功能——对于一个N×M的方格,1:输入一个区域,将此区域全部值作加法;2:输入一个区域,求此区域全部值的和其实和一维线段树同理,只是不知道为什么速度比想象的慢那么多,求解释。。。@acphile(还有代码略恶心,求原谅。。。^_^) 1 const tvp=8000000; 2 var 3 ... 阅读全文
posted @ 2015-01-20 23:42 HansBug 阅读(437) 评论(0) 推荐(0) 编辑
摘要:实现功能——1:区间开根;2:区间求和(此模板以BZOJ3038为例)作为一个非常规的线段树操作,其tag也比较特殊呵呵哒 1 var 2 i,j,k,l,m,n:longint; 3 a,b:array[0..500000] of int64; 4 function max(x,y:l... 阅读全文
posted @ 2015-01-20 23:38 HansBug 阅读(1024) 评论(0) 推荐(0) 编辑
摘要:实现功能——1:区间加法;2:区间求和最基础最经典的线段树模板。由于这里面操作无顺序之分,所以不需要向下pushup,直接累积即可 1 var 2 i,j,k,l,m,n,a1,a2,a3,a4:longint; 3 a,b:array[0..100000] of longint; 4 ... 阅读全文
posted @ 2015-01-20 23:22 HansBug 阅读(569) 评论(0) 推荐(0) 编辑
摘要:实现功能——1:区间覆盖值;2:区间求和相比直接的区间加,这个要注重顺序,因为操作有顺序之分。所以这里面的tag应该有个pushup操作(本程序中的ext) 1 var 2 i,j,k,l,m,n,a1,a2,a3,a4:longint; 3 a,b,d:array[0..100000]... 阅读全文
posted @ 2015-01-20 23:20 HansBug 阅读(523) 评论(0) 推荐(0) 编辑
摘要:实现功能——1:区间加法 2:区间乘法 3:区间覆盖值 4:区间求和这是个四种常见线段树功能的集合版哦。。。么么哒(其实只要协调好三种tag的关系并不算太难——前提是想明白了线段树的工作模式)代码长度几经修改后也大为缩水还有!!!——通过BZOJ1798反复的尝试,我的出来一个重要结论——尽量减少p... 阅读全文
posted @ 2015-01-20 22:50 HansBug 阅读(568) 评论(0) 推荐(0) 编辑
摘要:实现功能——操作1:将两个数字合并到一个集合内;操作2:判断两个数字是否在一起第6行是亮点,这个优化能快出不少,真的 1 var 2 i,j,k,l,m,n:longint; 3 c:array[0..100000] of longint; 4 function getfat(x:lon... 阅读全文
posted @ 2015-01-20 21:56 HansBug 阅读(189) 评论(0) 推荐(0) 编辑
摘要:实现的功能如下——在一个N个点的无环图中,共有N-1条边,M个访问中每次询问两个点的距离原理——既然N个点,N-1条边,则说明这是一棵树,而且联通。所以以1为根节点DFS建树,然后通过求两点的LCA的方式,先求得最近公共祖先,然后再通过深度来求出两点距离 1 type 2 point=^... 阅读全文
posted @ 2015-01-19 23:57 HansBug 阅读(271) 评论(0) 推荐(0) 编辑
摘要:实现功能——输入N,M,提供一个共计N个单词的词典,然后在最后输入的M个字符串中进行多串匹配(关于AC自动机算法,此处不再赘述,详见:Aho-Corasick 多模式匹配算法、AC自动机详解。考虑到有时候字典会相当稀疏,所以引入了chi和bro指针进行优化——其原理比较类似于邻接表,这个东西和nex... 阅读全文
posted @ 2015-01-19 23:33 HansBug 阅读(384) 评论(0) 推荐(0) 编辑
摘要:实现的功能——输入1 x,将x加入小根堆中;输入2,输出最小值并去在堆中除掉 实现原理——左偏树,这里面维护的是一个小根堆,个人认为其还是没有发挥出左偏树的真正威力——其真正威力在于堆与堆之间可以直接合并,而且复杂度仅为O(logN),在零散插入元素时可以采用本程序中一个个加入的方法,但是当有些题目 阅读全文
posted @ 2015-01-19 22:49 HansBug 阅读(2175) 评论(0) 推荐(1) 编辑
摘要:实现功能为二分图匹配原理:匈牙利算法,核心思想——匹配上了就配,没直接匹配上也要通过前面的腾出位置让这个匹配上(详见:趣写算法系列之——匈牙利算法)本程序以Codevs2776为例详见Codevs2776 1 type 2 point=^node; 3 node=record 4 ... 阅读全文
posted @ 2015-01-19 22:15 HansBug 阅读(244) 评论(0) 推荐(0) 编辑
摘要:实现的功能:将序列区间反转,并维护详见BZOJ3223 1 var 2 i,j,k,l,m,n,head,a1,a2:longint; 3 s1:ansistring; 4 a,b,c,d,fat,lef,rig:array[0..200000] of longint; ... 阅读全文
posted @ 2015-01-14 23:05 HansBug 阅读(418) 评论(0) 推荐(0) 编辑
摘要:实现功能如下——1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数,因输出最小的排名)4. 查询排名为x的数5. 求x的前驱(前驱定义为小于x,且最大的数)6. 求x的后继(后继定义为大于x,且最小的数)本程序的实现原理为Treap平衡树详见BZOJ... 阅读全文
posted @ 2015-01-13 21:46 HansBug 阅读(269) 评论(0) 推荐(0) 编辑
摘要:该模板实现的功能——进行区间的乘法和加法,以及区间的求和(1:乘法 2:加法 3:求和)详见BZOJ1798 1 type 2 vet=record 3 a0,a1:int64; 4 end; 5 var 6 i,j,k,l,m,n,a2... 阅读全文
posted @ 2015-01-13 21:44 HansBug 阅读(628) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示