堆,可持久化线段树
摘要:
堆,可持久化线段树 I.堆 堆是一颗完全二叉树 堆顶一定是堆中所有元素最大或最小的(对于优先级而言) 实现堆 应该不会有人手写堆吧 用STL的优先队列 定义一个优先队列: 首先你需要一个头文件:#include<queue> priority_queue<int> q;//这是一个大根堆q prio
单调栈,单调队列,树状数组,线段树
摘要:
单调栈,单调队列,树状数组,线段树 I.单调栈 要了解单调栈,首先,我们得了解栈。 栈是一种数据结构,表现为数据“先进先出”。 而单调栈则是栈中所有数据单调递增或单调递减。 如何维护单调栈 我们以维护一个单调递减的单调栈为例: 假设有以下数据 3 7 4 12 2 对于第一个元素,因为栈中没有元素,
字符串处理
摘要:
字符串处理 I.KMP KMP主要应用于字符串匹配问题 KMP相比普通的单模式串匹配的优势在于:对于每次失配,我们不会从头开始,而是从特定的位置开始匹配。 考虑一组样例 模式串 :abcab 文本串 :abcacababcab 首先,前四位按位匹配成功,遇到第五位不同。而这时,我们选择将abcab向
进阶图论
摘要:
进阶图论 I. 割点与桥 首先,我们得了解割点的含义 割点 对于一个无向图,如果把一个点删除后这个图的极大连通分量数增加了,那么这个点就是这个图的割点(又称割顶)。 通俗点说,就是连接两个或多个连通分量的公共点。 如何求割点呢,这里引用一个算法:Ttarjan 定义 dfn[i] 为 i 点DFS访
三分 , 哈希, 模拟退火
摘要:
三分,哈希, 模拟退火 I .三分 三分,顾名思义, 将一个区间分成三段(需要平均分), 以类似二分的处理方式判断答案在那个区间。 接着继续枚举, 直到确定结果。 三分一样需要单调性, 但单调性与二分有所不同。 二分需要满足数据严格“ 递增 ”或“ 递减 ”。而三分只需要满足数据是一个单峰或单谷函数