随笔分类 - 算法与数据结构
摘要:"E. Physical Education Lessons" 题目:一段长度为n的区间初始全为1,每次成段赋值0或1,求每次操作后的区间总和。(n define dd(x) cout P; typedef priority_queue BQ; typedef priority_queue,grea
阅读全文
摘要:CDQ的嵌套 上一篇博客介绍了一下CDQ的入门思想。这里再介绍一下它的进阶,CDQ套CDQ。其实如果对入门思想掌握的透彻,嵌套也是很容易掌握的,思想是一样的。 什么是嵌套 简单地说,有的问题,如果用一重CDQ来分治一个维度后,在合并时,还无法仅借助一层数据结构(如树状数组)来计算左区间对右区间元素的
阅读全文
摘要:CDQ分治 cdq分治与其说是算法,不如说是一种解决问题的思想或方式。与常规分治对比,常规分治是通过解决左右两个子区间的问题,合并得到大区间问题的解。但cdq分治通过处理左区间对右区间的影响来得到大区间的解。一般来说,cdq分治可以顶替一层数据结构,而且常数小,空间开销也小。缺点是需要离线。 离线为
阅读全文
摘要:可持久化线段树 可持久化线段树,也常被叫做主席树,和发明者的外号有关,学习前需要先熟悉线段树 适用问题 一般用于处理两类问题: ①求区间第K大(也可求动态区间K大) ②查询历史版本的区间询问 原理 解决上述两种问题用到的结构,本质上是一样的。在逻辑上相当于建了n棵线段树,对于区间K大来讲,每棵树代表
阅读全文
摘要:基础算法总结 对于算法总结,在证明等方面不做深究(大多数还未深刻理解),主要记录:结论,使用条件,适用问题等,并附上一些总结的较好的博主的博客。由于内容较多,时间少,先罗列清单,慢慢补上。 数学 "Lucas定理" (用于m,n较大时,求C(m,n)%P) "Miller Robin算法" (大素数
阅读全文
摘要:之前在做一道关于字符串匹配的题时,用到了 "字典树" ,但那时是用指针实现的,这次又遇到需要使用字典树这一结构的题,向学姐要了她的板子,学习了用数组实现的方法,对于解题而言,更为简短快速。 因为题目要求最大异或和,因此用的是01字典树,在字典树的基础上稍作修改。 以下为字典树和01字典树的普遍实现:
阅读全文
摘要:字典树Trie Trie树,又称为前缀树(Prefix Tree)、单词查找树或键树,是一种多叉树结构。 性质 ①根节点不包含字符,除根节点外的每一个子节点都包含一个字符。 ②从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。 ③每个节点的所有子节点包含的字符互不相同。 PS:通
阅读全文
摘要:树状数组 树状数组是在线段树的结构上改造而来数据结构,主要用于完成: 给定一个初始值全为0的数列 ①给定i,计算返回a1+a2+……+ai的值 ②给定i和x,执行ai+=x BIT的求和 BIT的值更新 C++ void add(int i, int x) { while (i
阅读全文
摘要:并查集 之前对并查集一直不太熟悉,这次做题遇到了,就做一个简单记录 并查集是什么 并查集是一种管理元素分组的数据结构,可以①查询两个元素是否属于同一组,也可以②合并两个元素所属组。为树形结构,但不是二叉树 并查集基本功能的实现 C++ int par[maxn]; //父亲 int rk[maxn]
阅读全文
摘要:用ST算法解决RMQ(区间最值问题) 在解决CF上的6E "Exposition" 时,用到了RMQ+二分的方法。学习了用ST来快速解决RMQ问题,因此做一个小记 建表 用DP的方式来建ST。 dp[i][j]表示从第i个数起,往后2^j个数中的最大(或最小)值。如dp[1][3]则表示区间内第1个
阅读全文

浙公网安备 33010602011771号