算法与数据结构
文章平均质量分 79
专注于竞赛时常用的算法与数据结构
杨子曰
这个作者很懒,什么都没留下…
展开
-
ST表——杨子曰数据结构
ST表——杨子曰数据结构今天我们来曰一种O(1)查询的数据结构——ST表它,就是RMQ问题的克星!给你一个数列,对于询问[l,r],输出区间[l,r]内的最大值(你喜欢最小值也可以啦!)这……我用线段树O(log n)(搞一搞不久好了吗?不好!!!我们是追求速度的人,由于它没有更新操作,我们可以做到O(1)查询我们的ST表闪亮登场!!(在下面的东西前你也可以先阅读一下:谈谈最近公共祖...原创 2019-11-06 19:36:02 · 281 阅读 · 0 评论 -
左偏树——杨子曰数据结构
左偏树——杨子曰数据结构先扔出一道题(【洛谷】P3377 【模板】左偏树(可并堆)):题目描述如题,一开始有N个小根堆,每个堆包含且仅包含一个数。接下来需要支持两种操作:操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或第y个数已经被删除或第x和第y个数在用一个堆内,则无视此操作)操作2: 2 x 输出第x个数所在的堆最小数,并将其删除(若第x个数已经被删除,则输出-1...原创 2019-08-19 16:00:05 · 332 阅读 · 0 评论 -
【SPOJ2916 GSS5】Can you answer these queries V——杨子曰题目
【SPOJ GSS5】Can you answer these queries V——杨子曰题目题目描述You are given a sequence A[1], A[2], …, A[N] . ( |A[i]| <= 10000 , 1 <= N <= 10000 ). A query is defined as follows: Query(x1,y1,x2,y2) =...原创 2019-05-13 14:01:50 · 356 阅读 · 1 评论 -
线段树(六)可持久化线段树 (主席树)——杨子曰算法
线段树(七)可持久化线段树 (主席树)——杨子曰算法突然意识到一个问题,线段树应该是数据结构不应该说是杨子曰算法,算了算了……原创 2020-08-22 17:06:56 · 290 阅读 · 0 评论 -
平衡树之Treap(树堆)——杨子曰数据结构
平衡树之Treap(树堆)——杨子曰数据结构来道题(Tyvj 1728 / HYSBZ - 3224):您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:插入x数删除x数(若有多个相同的数,因只删除一个)查询x数的排名(若有多个相同的数,因输出最小的排名)查询排名为x的数求x的前驱(前驱定义为小于x,且最大的数)求x的后继(后继定义为大于x,且最小的数)...原创 2019-03-22 18:17:56 · 340 阅读 · 0 评论 -
AC自动机——杨子曰算法
AC自动机——杨子曰算法”哦,什么,这个算法可以自动AC题目?“”呵呵,你想多了……“在阅读此文章前,请先确保掌握字典树和KMP算法,你也可以阅读:字典树(trie)——杨子曰算法KMP——杨子曰算法字典树和KMP都是用来处理字符串的问题的,我们用KMP可以解决类似yzy在yzyzyzyblockyzyzy出现了几次的问题,但如果有一天有一个人问你:yz,yzy,bl,yzyb在y...原创 2019-03-21 14:57:13 · 247 阅读 · 0 评论 -
Manacher(马拉车)算法——杨子曰算法
Manacher(马拉车)算法——杨子曰算法马拉车?中华汉字真是博大精深……今天我们曰的算法只能干一件事情——求一个字符串的最长回文子串(神马是回文子串就不用我说了吧)首先我们来想一想大暴力怎么做“我知道!枚举子串的头,枚举子串的尾,再暴力判断这个串是不是回文串,复杂度O(n3)”杨子曰:“呃……太暴力了,能不能稍稍优化一下”我们枚举回文字串的中心,然后向两边延伸,比较是否对称,一...原创 2019-03-20 12:41:21 · 199 阅读 · 0 评论 -
分块算法——杨子曰算法
分块算法——杨子曰算法给出一个长为 n 的数列,以及 m 个操作,操作涉及区间加法,单点查值。今天我们来曰一个炒鸡暴力的算法——分块这是分块最最简单的应用:它的想法简直暴力的不信,当你懒得打一些代码老长老长的数据结构时,你可以采用这种粗暴的方法:首先,把数列分成n\sqrt{n}n段,那么每段的长度就是n\sqrt{n}n然后就开始无脑操作了,比方说我们要对这一区间更新:对...原创 2019-03-15 13:54:14 · 266 阅读 · 0 评论 -
KMP——杨子曰算法
KMP——杨子曰算法半年过后我又回来了先给一道题:如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置。(字符串长度&amp;amp;amp;amp;amp;lt;=1000000)大佬说:“哟,这道题的暴力好优啊!!”就像下面这样指针i,j从头开始哦,一样,i++,j++嗯,又一样,i++,j++继续什么,不一样了,没事j从头来,i从第二个出发一开始就不一样了,那再向前一格…...原创 2019-03-11 13:59:00 · 520 阅读 · 0 评论 -
【SPOJ GSS3】Can you answer these queries III(动态区间最大子段和)——杨子曰题目
线段树(六)——杨子曰算法额……线段树我又来了一道题:SPOJ GSS1S POJ GSS1_Can you answer these queries I 给一个长度为n(n&amp;amp;amp;amp;amp;amp;amp;amp;lt;=50000)的序列,再给出m个询问l,r,对于每个询问输出区间[l,r]的子序列最大和...原创 2018-08-08 11:06:24 · 424 阅读 · 0 评论 -
线段树(一)——杨子曰算法
线段树(一)——杨子曰算法来来来,先问一个问题,给一个长度为n(n&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;=200000)的序列,然后是m(m&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;=200000)个询问,对于每个询问x,y,求区间[x,y]的max 噢!!恶心的数据范围,显然是O(m log n)的节奏啊! 没错,我们今天就要用m log n的复杂度来解决这道题原创 2018-04-07 20:30:39 · 737 阅读 · 6 评论 -
线段树(二)——杨子曰算法
线段树(二)——杨子曰算法传送门:线段树(一)这个问题与之前最大的区别就是多了更新,这也就是线段树的优势了,杨子曰:线段树专注于在区间中更新的问题(怎么弄得跟企业的宣传标语一样) 也就是说,我们要在原来那个没有更新的代码的基础上增加一个过程update就行了void update(int l,int r,int k,int v,int nod){ //l,r表示目前线...原创 2020-08-22 17:06:08 · 521 阅读 · 0 评论 -
线段树(三)——杨子曰算法
线段树(三)——杨子曰算法传送门:线段树(一) 传送门:线段树(二)接着上次的问题,我们开始曰今天的内容,这道题与之前拿那道最大的区别就是它更新的内容是——一个区间,哦,瞬间有大佬发话了,这岂不是很简单,就像上次的区间query一样,分三种情况讨论,全在左区间,全在右区间,以及一半在左,一半在右,然后递归下去就完了,但是有一个很大的区别,就是找到的区间和要更新的区间完全吻合时,不能停...原创 2020-08-22 17:06:19 · 488 阅读 · 0 评论 -
线段树(四)——杨子曰算法
线段树(四)——杨子曰算法传送门:线段树(三)欧,现在是线段树模板题的最后一个大BOSS了,也就是更新的是区间,询问的也是区间,看上去很恶心,现在解决它!(我们把add(lazy)和sum记在一个struct,看得清晰)首先,他询问的是区间和,So,最开始肯定要build,不多说:void build(int l,int r,int nod){ tree[nod...原创 2018-04-22 13:46:36 · 333 阅读 · 0 评论 -
线段树(五)——杨子曰算法
线段树(五)——杨子曰算法传送门:线段树(四) 瞎BB:线段树我又来了!给一个长度为n(n&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;=200000)的序列,再给出m个操作,对于每个操作,先给出一个k,如果k=1,则输入x,y,输出区间[x,y]中能被7整除的数的个数,如果k=2,则输入x,y,z,把区间[x,y]的每个元素加上z 对于这道题我们会发现与之前最大的区别是,它的询问内容,好恐怖。我们原创 2018-07-11 11:41:25 · 268 阅读 · 0 评论 -
线段树合集——杨子曰算法
线段树集合——杨子曰算法这里我把我写的五篇线段树汇总一下: 线段树(一):主要讲了线段树是什么鬼,以及怎样query(←想知道它是什么meaning,点进去!) 线段树(二):体现了线段树真正的价值——update(←想知道它是什么meaning,点进去!) 线段树(三):线段树区间更新的优化——lazy(←想知道它是什么meaning,点进去!) 线段树(四):线段树(二)和线段树(...原创 2018-07-12 10:04:22 · 680 阅读 · 2 评论 -
字典树(trie)——杨子曰数据结构
字典树(trie)——杨子曰算法先扔一道题:HDU - 1251统计难题 就是说给你一堆字符串,再是一堆询问,问你以这个字符串为前缀的字符串有多少个?今天我们来曰一个字符串中常用的数据结构——字典树(高雅的人称之为trie树(读作:踹树)) trie树有一下几个特点: 1.根节点是空的 2.每个节点上都会记录一个字符(除了根节点) 3.从更节点下面出发,往下走路径上记录字符串...原创 2018-08-06 14:41:42 · 302 阅读 · 0 评论 -
最小表示法——杨子曰算法
最小表示法——杨子曰算法先给一道题: 就是说给你一个可以循环的字符串,问以那个字符开头,它的字典序最小今天我们曰最小表示法,他可以求出一个环之类的东西的最小表示——那有什么卵用呢?这样你就可以判断两个环是不是同一个了[欢呼](还真没什么卵用)上面那道题有人说O(n^2),就搞定了(呵呵) 我们用O(n)干掉它好了,接下来我们就来曰最小表示怎么求: 这种算法使用两个指针i,j实...原创 2018-08-01 12:52:02 · 319 阅读 · 0 评论 -
堆排——杨子曰算法
堆排——杨子曰算法没错,它又是一个n log n的算法,有人说:学这么多排序有什么卵用? 杨子曰:装逼堆排是用一个堆来实现的(废话) 我们这里说的堆是小根堆——就是爸爸比儿子要小的堆(听上去好别扭) 堆排的实现要分为两个部分:建堆和拆堆 我们用3,4,6,1,5,2来模拟一下 黑喂狗:1.建堆 我们在建堆是一定要维护爸爸比儿子小,具体怎么实现呢?拿到一个数后不管三七...原创 2018-07-26 12:47:56 · 263 阅读 · 0 评论 -
强连通分量之tarjan缩点——杨子曰算法
强连通分量之tarjian缩点——杨子曰算法这次是真的没有什么模板题,直接开讲吧!首先什么是强连通分量呢? 有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强原创 2018-07-19 13:40:22 · 1081 阅读 · 0 评论 -
二分图匹配之匈牙利算法——杨子曰算法
二分图匹配之匈牙利算法——杨子曰算法话说在一个相亲大会上,有n个男的和m个女的,每个男生都有自己喜欢的1个或几个女的,身为主办方的你要尽可能满足更多男生,问最多能匹配出多少对今天我们来曰二分图,那二分图到底是什么鬼呢? 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i i...原创 2018-07-17 12:10:31 · 361 阅读 · 0 评论 -
拓扑排序——杨子曰算法
拓扑排序——杨子曰算法要知道,如果你要用c++打出拓扑排序的代码,你先要学会c++语法和拓扑排序的原理,你要学会c++语法你先要学会基本数学和计算机基础知识(←Are U sure?),你要学会拓扑排序的原理,你先要学会计算机基础知识和栈的使用,那现在让一个什么都不会的人学会拓扑,请输出任意一种合法方案拓扑排序不像我们平时...原创 2018-07-14 11:16:56 · 319 阅读 · 0 评论 -
网络流之最大流——杨子曰算法
网络流之最大流(FF)——杨子曰算法先上题:在一个国家里,有很多下水道(有向边),下水道都有自己能运输水的最大量,这些下水道把所有的n个城市都连在了一起,现在要从拥有无穷无尽水源的城市通过下水道,输送到城市n(除城市1外其他城市都没有水),问,最多能运输多少水?今天,我们来曰图论中一个高大上的算法——网络流——中的最大流。就是在一个有向图中,水流从一个点流向另一个点,能流过去的水流量。...原创 2018-07-13 12:33:42 · 384 阅读 · 0 评论 -
树链剖分——杨子曰算法
树链剖分——杨子曰算法先搞一道题,给一个n个结点的树原创 2018-07-12 15:45:03 · 535 阅读 · 0 评论 -
割点——杨子曰算法
割点——杨子曰算法瞎BB: ✌,破纪录——最短的博客名!!!!首先,来讲一讲What is 割点?赶紧度娘一下 在一个无向图中,如果有一个顶点集合,删除这个顶点集合以及这个集合中所有顶点相关联的边以后,图的连通分量增多,就称这个点集为割点集合。 如果某个割点集合只含有一个顶点X(也即{X}是一个割点集合),那么X称为一个割点。吼吼吼,胆子小的人已经关掉了博客,神马...原创 2018-05-04 10:09:18 · 490 阅读 · 2 评论 -
最大子矩阵——杨子曰算法
最大子矩阵——杨子曰算法来,今天曰个模板——最大子矩阵 简单的说就是给你一个矩阵(n*m,有负数),让你在这个矩阵中取出一个子矩阵,是得子矩阵的和最大。1.O(n^6)巨型大暴力 n^2枚举子矩阵左上角,n^2枚举子矩阵右下角,再n^2求个和,O(n^6)搞定,如果你想到的是这个,杨子只想曰:呵呵2.机O(n^3)智大暴力 依然用n^2枚举子矩阵左上角,n^2枚举子矩阵右下角,但...原创 2018-03-31 20:14:59 · 377 阅读 · 0 评论 -
二维前缀和(矩形割补法)——杨子曰算法
二维前缀和(矩形割补法)——杨子曰算法今天曰一个很实用的技巧,二维前缀和 来,先问一个问题,如果我给出一个矩阵,让你求出任意一个子矩阵的和,你会怎么搞? 哦,简单简单,O(n^2)咔咔地暴力一下,欧了 要是真这么简单,我会问你吗?我们追求的是速度,做到O(n^2)读入后,O(1)搞定。好的,你先要知道一个东西叫做前缀和,就是让你算出一个序列中子序列的和, 方法就是用f[i]...原创 2018-03-30 10:04:08 · 604 阅读 · 0 评论 -
谈谈最近公共祖先(LCA)——杨子曰算法
谈谈最近公共祖先(LCA倍增)——杨子曰算法今天,杨子来曰(yue)一曰(yue)算法——LCA 是神马呢? 举个例子,我姓杨,你也姓杨,所以我们早在5325年前肯定有一个公共祖先,BUT这个公共祖先的儿子也有可能是我们公共的祖先,对吧?So,肯定在我们的所有公共祖先中,有一个是离我们最近的(也就是说,他的两个儿子分别是我和你的祖先),那么这个祖先就称为,我和你的最近公共祖先,即LCA. ...原创 2018-03-26 21:20:35 · 1002 阅读 · 0 评论 -
树链剖分求LCA——杨子曰算法
树链剖分法求LCA——杨子曰算法显然这是树链剖分和LCA的结合体 然我假装你已经回来这两个东西,或者看了: 树链剖分——杨子曰算法 谈谈最近公共祖先(LCA)——杨子曰算法 这两个东西,如果你对上面那两个玩意有影响的话,黑喂狗:树链剖分法求LCA思路非常的简单,也非常好理解: 1.按重儿子剖分这棵树 这时对于同一条链上的两个点直接输出高的那个就行了,那如果两个点不在同一条链...原创 2018-08-09 09:28:42 · 549 阅读 · 0 评论