线段树 封装模板$jls$的基础LSGT模板,区间为$[l,r)$,之后可能会更改。 ▶代码 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 2024-07-28 数据结构 #数据结构 #线段树
bitset 概念bitset存储二进制数位。 bitset就像一个bool类型的数组一样,但是有空间优化——bitset中的一个元素一般只占1 bit,相当于一个char元素所占空间的八分之一。 主要特点 固定大小:bitset 是一个固定大小的位集合,大小在编译时确定,无法在运行时改变。 位操作:bitset 提供了一组操作符和成员函数,用于高效地进行位操作。 内存紧凑:bitset 使用一个或多个整数来存 2024-07-23 STL #STL #bitset #二进制
string 概念可以代替传统的char数组。 主要特点 动态大小:string 是一个动态大小的字符序列,能够根据需要自动调整大小。 标准字符集:string 默认使用 ASCII 字符集,但也支持 Unicode。 丰富的接口:string 提供了丰富的成员函数和操作符,用于处理字符串的各种操作。 内存管理:string 自动管理其所需的内存,因此无需手动分配或释放内存。 基本用法1. 创建和初始化123 2024-07-23 STL #STL #字符串 #string
set SET概念主要特点 唯一元素:set 是一种不允许重复元素的集合,每个元素在集合中只能出现一次。 有序:set 中的元素是按照特定的顺序自动排列的,默认情况下是升序排列。 底层实现:set 通常使用红黑树或其他平衡树结构作为底层实现。 查找效率:由于底层实现为平衡树,set 提供对元素的对数时间复杂度的查找、插入和删除操作。 基本用法1. 创建和初始化123456789101112#includ 2024-07-23 STL #STL #set #集合
stack 概念STL(标准模板库)中的 stack 是 C++ 中的栈容器。实现了栈的基本功能。 主要特点 **先进后出 (LIFO)**:stack 是一种先进后出(LIFO)数据结构,元素的插入和删除都在同一端进行,即栈顶。 底层实现:stack 通常使用双端队列(deque)或链表作为底层实现。 限制操作:只能访问栈顶元素(top())、进行入栈(push())和出栈(pop())操作。 基本用法1 2024-07-23 STL #STL #stack #栈
queue 概念STL(标准模板库)中的 queue 是 C++ 中的队列容器。实现了队列的基本功能 $FIFO$。 主要特点 **先进先出 (FIFO)**:queue 是一种先进先出(FIFO)数据结构,元素的插入在队尾进行,元素的移除在队首进行。 底层实现:queue 通常使用双端队列(deque)或链表作为底层实现。 限制操作:只能访问队首元素(front())、队尾元素(back()),以及执行入队 2024-07-23 STL #STL #queue #队列 #FIFO
vector 概念STL(标准模板库)中的 vector 是 C++ 中一个非常常用的容器类。它是一个动态数组,可以自动调整大小,并提供了类似于数组的随机访问功能。 主要特点 动态大小:vector 会根据需要自动调整其大小,允许在运行时增加或减少元素。 连续存储:vector 的元素在内存中是连续存储的,这意味着可以通过偏移量进行高效的随机访问。 自动管理内存:vector 会自动管理其所需的内存,因此无需手 2024-07-23 STL #STL #vector
STL 概念C++ 标准模板库(Standard Template Library,STL)是一套功能强大的 C++ 模板类和函数的集合,它提供了一系列通用的、可复用的算法和数据结构。 STL 的设计基于泛型编程,这意味着使用模板可以编写出独立于任何特定数据类型的代码。 STL 分为多个组件,包括容器(Containers)、迭代器(Iterators)、算法(Algorithms)、函数对象(Funct 2024-07-23 STL #cpp #STL
记忆化搜索 定义记忆化搜索(Memoization)是一种优化技术,用于通过存储已经计算过的结果来避免重复计算。它是一种动态规划的实现方式,通常用于递归算法中。通过将中间结果存储在数据结构(如数组或字典)中,记忆化搜索可以显著提高算法的效率,特别是在解决具有重叠子问题的计算问题时。 简单来说就是当算法需要计算某个子问题的结果时,它首先检查是否已经计算过该问题。如果已经计算过,则直接返回已经存储的结果;否则,计 2024-07-20 动态规划 #动态规划 #记忆化搜索
树形DP 定义树形DP,顾名思义是在树上的DP,应用于树形结构的动态规划。 其核心思想是在树的节点间传递和合并状态信息,逐步计算出所需的最优解。 因为树的递归性质,树形动态规划一般都是递归求解的。 经典题目P1352 没有上司的舞会 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 以这个题目为例,我们定义 $f[i][0/1]$ 来表示以 $i$ 为根的子树的最优解,$f[i][0]$ 代 2024-07-19 动态规划 #动态规划 #树形DP #DP
区间DP 定义区间类动态规划是线性动态规划的扩展,它在分阶段地划分问题时,与阶段中元素出现的顺序和由前一阶段的哪些元素合并而来有很大的关系。 令状态$f(l,r)$表示$l到r$ 的区间的元素合并能获得到的价值最大(最小),为此$f(l,r) = max{f(l,k)+f(k+1,r) + W}$,$W$为这两个区间合并起来的价值。 该问题的求解主要是通过合并小区间的最优解进而得出整个大区间的最优解。 特点 2024-07-19 动态规划 #动态规划 #DP #区间DP
拓展欧几里得 前置知识最大公约数GCD与LCM 模运算模运算的基本规则与四则运算基本一致:为什么没有除法,是因为除法在这里比较特别。 同余概念如果 $a$ 和 $b$ 除以 $c$ 的余数相同,就说 $a$ 和 $b$ 关于模 $c$ 同余,记作 $a \equiv b \pmod{c}$。 > 如果 $a$ 和 $b$ 的差能够被 $m$ 整除,那么就说 $a$ 和 $b$ 关于 $m$ 同余。 同余 2024-05-13 数学 #cpp #数论 #gcd