文章分类 - c++常用操作 / 数据结构
摘要:线段树是一种维护区间性质的用数组模拟的数据结构,每个节点存储的是一个区间的结果,以其\(nlogn\)级的复杂度有着相当大的意义。 这里以区间加以及区间乘操作和区间和查询为例。 P3372 【模板】线段树 1 P3373 【模板】线段树 2 建树 无论怎么样,首先要进行的是建树。 #define l
阅读全文
posted @ 2024-05-09 18:12
WE-R
摘要:树状数组 树状数组,能使对一个区间的数修改以及查询的速度提升许多。这里从从单点修改,单点查询,区间修改,区间查询来出发。 对于4个节点的树状数组来说,其结构大致如下: 不过需要注意的是每个节点只有最高节点对应的是树状数组的节点,但这样做的正确性其实是二进制计算得到的。 也就是 $ c_1 = a_1
阅读全文
摘要:堆 堆分为插入,查询,删除3个操作,虽然我们通常用优先队列来实现堆的功能,但是手写堆还是需要会的。 P3378 【模板】堆 最基本的二叉堆,也就是用一个二叉树来模拟的,其中通过一定的单调性来排列,其中堆顶为单调性最高的点位。 类似于现端倪树一般的,我们父节点的左儿子记为now<<1,右儿子为(now
阅读全文
摘要:CF C. Tree Cutting 建树的一道比较经典题目。 点击查看代码 #include<cstdio> #include<cstring> #include<algorithm> #include<string> #include<map> #include<cstdlib> #includ
阅读全文
摘要:”如果一个选手比你小还比你强,那你就该退役了“————单调队列原理 单调队列多用于滑动窗口问题,即区间最优值的问题,与优先队列和线段树\(O(nlogn)\)的时间复杂度相比,有着高贵的\(O(n)\)时间复杂度。 区间最大(小)值 区间最值是单调队列的一个经典应用。例如给出一段序列 1 2 3 4
阅读全文
摘要:1.优先队列的定义 优先队列是一个以集合为基础的抽象数据类型。 优先队列中的每一个元素都有一个优先级。 定义在优先队列上的基本运算如下。 \(Min(H)\): 返回优先队列H中具有最下优先级的元素。 \(Insert(x,H)\): 将元素x插入优先队列H。 \(DeleteMin(H)\): 删
阅读全文

浙公网安备 33010602011771号