![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 77
sjystone
这个作者很懒,什么都没留下…
展开
-
黑红树 RedBlackTree
RedBlackTree APIint Size() 返回大小int Size(Key low, Key high) 返回 low 到 high 间的元素个数bool isEmpty() 是否为空Key Min() 返回最小元素Key Max() 返回最大元素int height() 返回树的高度Value get(Key key) 返回键对应的值bool contains(Key key) 是否含有键keyvoid put(Key key, Value val) 插入键key和对应的原创 2021-07-12 22:15:31 · 210 阅读 · 0 评论 -
渗透实验 - 并查集
#include <iostream>#include <cstring>#include <ctime>#include <cstdlib>using namespace std;const int N = 1000;class unionFind{public: unionFind(int size); ~unionFind(); void union_node(int p, int q); int fin原创 2021-07-05 08:22:04 · 155 阅读 · 0 评论 -
平衡树Treap
平衡树Treap由名字Treap可知,平衡树由tree和heap,即二叉搜索树and堆共同维护即平衡树的每个节点都要储存key和valkey满足二叉搜索树的性质,val满足堆的性质============================预备知识1.二叉搜索树BST满足以下两个条件的二叉树为BST1.当前节点的左子树中的任何一个点的key都严格小于当前点的key2.当前节点的右子树中的任何一个点的key都严格大于当前点的keyBST的中序遍历:按照 左子树 -> 根 -> 右原创 2021-04-05 16:16:02 · 195 阅读 · 0 评论 -
并查集
并查集写在开头:配合例题食用效果极佳并查集是通过数组p和find函数,实现集合之间的合并,元素查询的数据结构两个操作: 1.合并两个集合 2.查找某个元素的祖宗节点两个优化: 1.路径压缩 -> 时间复杂度降到o(logn) 2.按秩合并 -> 时间复杂度降到o(logn)若两者一起使用 -> 线性两个维护: 1.记录每个集合的大小(绑定到跟节点) 2.记录每个点到跟节点的距离(绑定到每个元素) 由此可延伸出维护点之间的距离(例0)和关系(例1)p[x]表示原创 2021-04-02 23:16:16 · 257 阅读 · 2 评论 -
线段树
线段树储存方式struct node{ int l, r; //当前节点的区间范围 int v; //其他需要储存的信息} tr[N]; 需要储存的信息,需要看目前的信息,父节点可否由子节点信息直接得到,若不能需要增加新的储存信息(具体见例题2,3) u点的左儿子 2u u << 1 即 tr[u << 1] u点的右儿子 2u+1 u << 1 | 1 即 tr[u << 1 | 1]五大基本操作 1.pu原创 2021-04-02 15:46:30 · 651 阅读 · 2 评论 -
树状数组
树状数组:1.单点修改,区间求和 1.快速求前缀和 o(logn) 2.修改某一个数 o(logn)2.拓展-区间加,求单点和(见例题简单的整数问题1) -> 结合差分3.拓展-区间加,区间求和(见例题简单的整数问题2)lowbit函数用于取x二进制最低位的1与后面的0组成的数字原理:二进制的负数是正数取反加一 int lowbit(int x) { return t & (-t); }假设x = 2ik + 2ik-1 +…+ 2i1原创 2021-04-02 14:10:36 · 240 阅读 · 0 评论