摘要: \(z\) 函数 对于字符串 \(s\)(下标从 \(0\) 开始),定义 \(z\) 函数 \(z(i)\) 的值为 \(s\) 与 \(s[i\sim |s|-1]\) 的最长公共前缀的长度,并且规定 \(z(0)=0\)。例如对于 \(s=\text{ABAAABC}\): \(z(0)\): 阅读全文
posted @ 2025-07-18 10:16 cold_jelly 阅读(16) 评论(0) 推荐(2)
摘要: 顾名思义,字典树就是一棵功能很像字典的一棵树。 我们在查单词时,往往是先按照首字母,再按照第二个字母,以此类推地查询我们想要的单词的。字典树通过将树的边赋为一个个字符,从而使我们能够一层层像查单词一样得到字符串的。 Trie 的基本结构 先放图哈: 在上图所示的 Trie 中,通过对于从根节点到叶子 阅读全文
posted @ 2025-07-17 21:39 cold_jelly 阅读(17) 评论(0) 推荐(1)
摘要: 字符串匹配 字符串匹配问题可以总结为下面这个问题: 给定字符串 \(s\) 和 \(t\),在 \(s\) 中寻找 \(t\)(这个子串)。 KMP 算法可以在 \(O(|s|+|t|)\) 的复杂度内求解该问题。 BF 算法 在 KMP 算法前,先看看暴力做法(BF 算法)。 不妨令问题中的 \( 阅读全文
posted @ 2025-07-17 20:40 cold_jelly 阅读(15) 评论(0) 推荐(2)
摘要: 前言 最近一直在做字符串的题,因此来写篇总结梳理一下【字符串】部分的知识点。 本文采用符号及解释 \(\Sigma\):字符集。例如全小写字母(\(|\Sigma|=26\)),数字符集(\(|\Sigma|=10\)); \(|s|\):字符串 \(s\) 的长度; \(s[i\sim j]\): 阅读全文
posted @ 2025-07-17 15:33 cold_jelly 阅读(16) 评论(0) 推荐(1)
摘要: 前置知识:BST & Treap 模板题 1:P3369 【模板】普通平衡树; 模板题 2:P3391 【模板】文艺平衡树。 简介 Treap 是一种入门级平衡树,有旋 Treap 通过旋转操作维持其平衡。相应地,无旋 Treap 不需要通过旋转,而是利用分裂与合并操作来维持平衡。由于创始人的名字, 阅读全文
posted @ 2025-05-28 17:49 cold_jelly 阅读(65) 评论(0) 推荐(3)
摘要: 前置知识:线段树、动态开点、权值线段树。 我们现在假设有如图所示两棵线段树(省略区间信息): 合并(merge)操作就是将这两棵线段树按某种方式组合成一棵新线段树,并且所有节点权值的组合方式应一致。 首先,我们要清楚,线段树合并本质上是一个相当暴力的过程,我们直接在两棵线段树上跑 DFS,对当前节点 阅读全文
posted @ 2025-05-27 17:57 cold_jelly 阅读(35) 评论(0) 推荐(2)
摘要: 模板题:P3919 【模板】可持久化线段树 1(可持久化数组) 前置知识:线段树、动态开点。 简介 对于一个数据结构,例如普通线段树、树状数组等,我们通常维护的是经过若干次操作后该数据结构的最新状态。但对于模板题而言,如果要求我们查询该数据结构所有历史版本的信息时,就需要用到可持久化数据结构了。 何 阅读全文
posted @ 2025-05-24 12:00 cold_jelly 阅读(62) 评论(0) 推荐(2)
摘要: 平衡树有很多种,像什么 Treap、Splay、红黑树啊等等,但其中最好理解、最好入门的还是 Treap 了,而且 Treap 的常数较小,跑起来比大部分平衡树都要快。 我们观察 Treap 这个单词,发现 Treap = Tree + heap。事实上 Treap 的实现确实是基于两个基本结构—— 阅读全文
posted @ 2025-05-23 21:39 cold_jelly 阅读(107) 评论(0) 推荐(4)
摘要: 前置知识:线段树、基础解析几何知识。 本篇文章参考了 Glacial_Shine 的这篇文章,在此一并感谢。 简介 李超线段树是一种用于维护平面直角坐标系内线段关系的数据结构。 具体而言,李超线段树支持在平面直角坐标系中动态插入线段,支持快速询问给定竖线与所有线段交点的最大纵坐标。 例如,例题 P4 阅读全文
posted @ 2025-05-22 17:36 cold_jelly 阅读(229) 评论(0) 推荐(4)
摘要: 板子:P3384 【模板】重链剖分/树链剖分 建议先阅读完题面,了解几个操作后再看文章。 树链剖分的核心思想就是把树剖分成若干条链,从而将树上问题转化为序列问题,便于我们使用数据结构来维护信息、优化算法。 常见的树链剖分有重链剖分、长链剖分等,本文主要介绍重链剖分。 本文的符号表示与基本定义: \( 阅读全文
posted @ 2025-05-20 14:31 cold_jelly 阅读(64) 评论(0) 推荐(3)