- 博客(14)
- 收藏
- 关注
原创 高精度模板(封装string版)
该代码实现高精度四则运算(加、减、乘、除),主要功能包括: 支持带符号的大数运算 自动处理前导零 实现基本的算术操作: 加法(jia)处理正负数和进位 减法(jian)处理借位和符号 乘法(cheng)采用逐位相乘累加 除法(chu)实现长除法 包含辅助函数removeLeadingZeros和greaterOrEqual 处理除零错误等特殊情况
2025-08-25 14:43:14
132
原创 高效求解数组元素左右大于自身个数不超过 k 的边界问题
本文提出了一种高效解决区间统计问题的算法,重点处理"对每个元素找到左右边界使区间内大于该元素的个数不超过k"的核心子问题。算法通过降序排序元素优先级,利用平衡二叉树(set)维护已处理元素位置,并推导有效区间边界。实现步骤包括:1)按价值降序排序元素;2)用set维护已处理元素位置;3)通过双向遍历确定边界;4)统计有效区间数量。该算法时间复杂度为O(nk²),显著优于暴力解法的O(n³),适用于大规模数据场景。最终将元素贡献(如体力值)与有效区间数相乘累加得到结果。
2025-08-23 15:20:40
819
原创 树链剖分模板
本文详细解析了树链剖分的代码实现,这是一种将树结构转化为线性结构的技术,通过两次DFS划分重链并分配连续编号,配合线段树高效处理树上路径和子树操作。文章剖析了核心数据结构、两次DFS的预处理过程(确定重儿子和划分重链)、线段树的实现(带懒标记的区间更新/查询),以及如何将树上路径/子树操作转化为线段树区间操作。最终实现路径更新、路径查询、子树更新和子树查询四种核心操作,时间复杂度为O(log²n),适用于处理各类树上路径问题。
2025-08-21 10:39:31
758
原创 后缀自动机在Trie树上的应用详解
本文详细介绍了后缀自动机(SAM)在Trie树上的应用方法。通过将多个字符串插入Trie树共享公共前缀,再基于BFS遍历构建后缀自动机,可高效解决多字符串匹配问题。文章包含Trie树和SAM的结构定义、关键算法步骤(包括Trie构建、SAM插入操作和结果统计)以及复杂度分析(O(L×|Σ|))。提供的完整代码实现了在Trie上构建SAM,并统计不同子串数量和状态总数,适用于处理洛谷相关模板题。
2025-08-12 10:15:29
310
原创 详解 AC 自动机:从原理到代码实现
本文详细解析了AC自动机算法在多模式字符串匹配中的应用。该算法结合Trie树和KMP思想,通过构建Trie树存储模式串、设计失败指针实现快速跳转,能够在O(L+M+Z)时间复杂度内完成匹配。文章以洛谷模板题为例,完整展示了AC自动机的实现过程,包括Trie树构建、失败指针计算、文本匹配和拓扑排序累加结果等核心步骤。AC自动机通过路径压缩和层次遍历优化,显著提升了匹配效率,适用于信息检索、内容过滤等场景,是处理大规模字符串匹配问题的重要算法。
2025-08-07 11:01:14
1009
原创 可持久化 01Trie 树
本文介绍了可持久化01Trie树的原理与应用。01Trie树是处理二进制位运算的高效数据结构,结合可持久化技术后能支持多版本区间查询。文章详细解析了核心代码实现,包括插入构建版本和查询区间最大异或值两个关键操作,并阐述了其通过版本继承与差异存储实现可持久化的原理。该数据结构特别适用于静态数组中查询任意区间与给定数异或的最大值问题,具有O(nlogM)空间复杂度、O(logM)时间复杂度的优势。提供的完整代码可直接复用,适用于处理1e9范围内数据的区间异或最值问题。
2025-08-05 17:01:17
701
原创 树上倍增法求 LCA
LCA(Lowest Common Ancestor,最近公共祖先)是树论中一个非常重要的概念,指的是在一棵树上两个节点最近的共同祖先节点。求解 LCA 的算法有很多,其中树上倍增法以其高效的查询效率(预处理 O (n log n),查询 O (log n))成为最常用的方法之一。本文将详细介绍树上倍增法的原理,并分享一份可直接复用的实现模板。
2025-08-05 15:30:20
516
原创 实现高效字符串存储与检索:Trie 树(字典树)模板详解
Trie树(字典树)是一种高效存储和检索字符串的树形数据结构,本文提供了简洁的Trie树实现模板。该模板通过共享前缀节省存储空间,支持O(L)时间复杂度的插入操作(L为字符串长度),适用于前缀匹配、词频统计等场景。核心实现包含初始化、插入函数和基础数据结构(节点数组、标记数组),并预留了查询、前缀统计等扩展接口。模板采用数组实现,支持小写字母处理,使用前需调整数组大小以匹配数据规模。该实现简洁高效,可作为字符串处理的基础组件。
2025-08-04 19:58:47
264
原创 后缀自动机(SAM)
后缀自动机是字符串处理领域的瑞士军刀,通过本指南,您应该已经掌握:SAM的核心原理与构建过程高效模板代码的实现细节常见字符串问题的SAM解法性能优化与扩展技巧附上平时提交代码模板:last = np;for(;p &&!ch[p][c];if (!else{for (;init();ll ans = 0;i <= n;i++){
2025-08-02 19:21:54
390
原创 手写STL系列:Deque
本文介绍了C++标准库中的双端队列(deque)实现原理。deque采用分块连续存储策略,支持O(1)时间复杂度的头尾操作和随机访问。其核心设计包括:分块存储结构(默认512字节大小的缓冲区)、复杂的迭代器实现(处理跨块移动)、高效的内存管理(动态扩展块指针数组)。与vector和list相比,deque在头部操作和随机访问间取得平衡,适合需要频繁两端操作且需随机访问的场景。文章详细解析了deque的初始化、元素插入/删除、内存管理等关键实现,并提供了完整的代码实现。
2025-07-29 20:13:53
580
原创 KMP 算法
本文围绕 KMP 算法展开详解,该算法是字符串匹配领域的重要突破,能将时间复杂度优化至 O (n+m)(n、m 分别为文本串和模式串长度)。
2025-07-29 19:21:23
1246
原创 手写STL系列:List
本文介绍了STL中list容器的实现原理与手动模拟实现方法。list作为双向链表,具有高效插入/删除(O(1))但随机访问效率低(O(n))的特点。核心实现包括:1)节点结构包含数据域和前驱/后继指针;2)双向迭代器支持++/--操作;3)使用哨兵节点简化边界处理;4)实现插入(insert/push)、删除(erase/pop)、合并(merge)、排序(sort)等核心操作。重点说明了深拷贝、迭代器失效规则及内存管理机制,与vector的连续内存特性形成对比。完整代码实现了标准list的主要接口,包括特
2025-07-22 11:09:05
389
原创 线段树算法详解与模板实现
本文详细介绍了线段树的基本原理和C++实现。线段树是一种基于分治思想的高效区间查询数据结构,支持建树、单点/区间更新和查询操作。文章提供了完整的C++模板代码,包含懒惰传播实现,并分析了各种操作的时间复杂度(建树O(n),查询/更新O(logn))。线段树适用于区间求和、最值查询、统计等场景,其变种包括树状数组、zkw线段树等。学习建议从基础应用入手,逐步掌握懒惰传播等高级特性,通过实践提升应用能力。
2025-07-21 20:53:33
412
原创 手写STL系列:vector
析构函数,if constexpr在编译阶段判断,如果条件成立之后就会运行,is_destructible_v是is_destructible的简写,判断类型是否能被析构。还有一些函数没有实现,另外内存管理部分应该不是很完善,测试案例我就不贴了,有兴趣的可以动手测试一下,加深理解。shrink_to_fit函数,释放未使用的内存,就是m_size*sizeof(T)与m_menSize的差值。元素被改变,右值插入,右值的资源会被移动到容器中,这通常会避免不必要的复制操作,效率更高。下面是一些好实现的函数。
2025-01-09 13:33:14
698
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅