摘要: #include <bits/stdc++.h> using namespace std; const int MAXN = 1e5 + 5; const double alpha = 0.7; struct Node { int l, r, val, size, cnt; bool deleted 阅读全文
posted @ 2025-02-25 21:25 流氓兔LMT 阅读(12) 评论(0) 推荐(0)
摘要: 如果我们每添加一个元素都需要记住这个权值线段树的状态,以便于我们对历史的操作,那么如果只使用权值线段树,则我们需要n个权值线段树同时保存状态,对于非常多的元素,我们就需要保存非常多的权值线段树,这样做空间一定会爆炸,而主席树提供了这一功能。 板子 #include<bits/stdc++.h> us 阅读全文
posted @ 2025-02-25 18:13 流氓兔LMT 阅读(13) 评论(0) 推荐(0)
摘要: 权值线段树维护的是桶,按值域开空间,维护的是个数。 简单线段树维护的是信息,按个数可开空间,维护的是特定信息。 普通线段树能解决区间最值和区间和问题 权值线段树可以解决数列第k大/小的问题 主席树能解决数列的子区间的第k大/小。 板子 #include <bits/stdc++.h> using n 阅读全文
posted @ 2025-02-25 15:31 流氓兔LMT 阅读(16) 评论(0) 推荐(0)
摘要: 定义与原理 定义 无旋式 Treap 本质上是一棵二叉搜索树,每个节点除了存储键值(Key)外,还额外维护一个随机优先级(Priority)。它的键值满足二叉搜索树的性质,即左子树的所有节点键值小于根节点键值,右子树的所有节点键值大于根节点键值;而优先级满足堆的性质,通常是大根堆,即每个节点的优先级 阅读全文
posted @ 2025-02-25 07:47 流氓兔LMT 阅读(81) 评论(0) 推荐(0)
摘要: 定义与原理 定义:K-D 树是一种二叉树,它是对数据点在 K 维空间中进行划分的树形数据结构。每个节点表示一个 K 维空间中的超平面,将空间划分为两个子空间,每个子节点对应一个子空间。 原理:K-D 树的构建基于数据点在各个维度上的取值。在构建过程中,会选择一个维度作为划分维度,然后根据该维度上的数 阅读全文
posted @ 2025-02-25 07:42 流氓兔LMT 阅读(58) 评论(0) 推荐(0)
摘要: 基本概念 分治思想:点分治的核心思想是分治,它通过选择合适的根节点将树划分为若干子树,递归地处理每个子树,最后合并子树的结果得到整棵树的解。 重心:在点分治中,通常会选择树的重心作为根节点。树的重心是指树中的一个节点,当把这个节点作为根时,其所有子树中最大子树的节点数最少。选择重心作为根可以保证每次 阅读全文
posted @ 2025-02-25 07:38 流氓兔LMT 阅读(46) 评论(0) 推荐(0)