摘要: 线段树、动态开点线段树、线段树合并、可持久化线段树(主席树)、二维线段树 树状数组、树状数组套线段树(函数式线段树) 平衡树:Splay,Treap,可持久化Treap,替罪羊树(、SBT、红黑树) kD-Tree,树套树 堆(优先队列),可并堆 字符串数据结构:字典树、AC自动机、后缀数组、后缀自 阅读全文
posted @ 2022-05-24 17:10 Audrey_Hall 阅读(239) 评论(0) 推荐(0)
摘要: 前置知识 二叉树 定义 基本操作复杂度: \(O(logn)\) 线段树是一棵二叉树,每个节点表示序列上的一段区间,其中根节点表示区间[1,n]。 从根节点开始,只要区间长度不为1,就将区间划分为两半,并分给两个子节点。 若当前节点表示区间[l,r], 当l≠r时,左孩子表示[l,(l+r)/2], 阅读全文
posted @ 2022-05-24 17:08 Audrey_Hall 阅读(164) 评论(0) 推荐(0)
摘要: 区间求和 区间最大值 区间修改 单点修改 前缀和 √ × × × 树状数组 √ √ × √ 线段树 √ √ √ √ 前缀和一般用于固定的数组; 树状数组功能较少,但代码简易、常数小; 线段树易于理解,功能强大,更灵活; 并非原创,仅是整理,请见谅 阅读全文
posted @ 2022-05-24 15:04 Audrey_Hall 阅读(57) 评论(0) 推荐(0)
摘要: lowbit() lowbit(x)是x的二进制表达式中最低位的1所对应的值(即返回x二进制为一的最低位数值)。 lowbit(0)=0 常用写法: int lowbit(int x){ return x&(-x); } //利用了负整数的补码特性 用法 维护区间 设节点编号为x,那么该节点维护的区 阅读全文
posted @ 2022-05-24 11:38 Audrey_Hall 阅读(87) 评论(0) 推荐(0)