本文用势能法证明\(Splay\)的均摊复杂度,对\(Splay\)的具体操作不进行讲述。 为了方便本文的描述,定义如下内容: 在文中我们用\(T\)表示一棵完整的\(Splay\),并(不严谨地)用\(|T|\)表示\(T\)这棵\(Splay\)的节点数目。 如无特殊说明,小写英文字母 ...
应该算是比较基础的知识了吧 随便写写,主要内容是证明。 例题 现编的 :有一棵 m 个点的有根树,每个点上有若干个数, m 个点上共有 n 个数,数的规模是 N 。每次询问给定 u,l,r ,求 u 的子树中有多少个数在 l,r 中。 做法是每个点开一棵线段树,插入这个结点上的数。如果能把一个结点的线段树的信息在合理的时间内全部插入 或者说 合并 到它父亲的线段树中,就可以由下往上做一遍树上递推, ...
2019-12-18 15:13 0 328 推荐指数:
本文用势能法证明\(Splay\)的均摊复杂度,对\(Splay\)的具体操作不进行讲述。 为了方便本文的描述,定义如下内容: 在文中我们用\(T\)表示一棵完整的\(Splay\),并(不严谨地)用\(|T|\)表示\(T\)这棵\(Splay\)的节点数目。 如无特殊说明,小写英文字母 ...
今天学习了一下动态开点的线段树以及线段树合并吧 理解应该还是比较好理解的,动态开点的话可以避免许多空间的浪费,因为这类问题我们一般建立的是权值线段树,而权值一般范围比较大,直接像原来那样开四倍空间的话空间复杂度不能承受。 动态开点的代码如下: 因为对应位置的结点所代表 ...
众所周知,树上背包如果上下界都卡紧了复杂度会是 \(O(nm)\),下面来进行这一点的证明。 以下设节点总数为 \(n\),背包容量最大是 \(m\)。 合并两个泛化背包的复杂度为 \(O(s_1s_2)\),其中 \(s_1\) 是第一个泛化背包的容量,\(s_2\) 是第二个背包的容量 ...
\(des\) 存在参数数组 \(a\),\(a\) 升序排列 \[a_1 < a_2 < \cdots < a_m, m <= 10 \] 存在长度为 \(n\) ...
树的遍历及复杂度分析 时间复杂度:由于要遍历树的所有节点,故时间复杂度均为O(n) 空间复杂度:递归算法用函数栈实现,空间复杂度即为栈的深度,也即树的高度O(logn) 此时的栈中存参数,函数指针,局部变量。 前序遍历 print(TreeNode * root) { if(root ...
min_25 筛是由 min_25 大佬使用后普遍推广的一种新型算法,这个算法能在 \(O({n^{3\over 4}\over log~ n})\) 的复杂度内解决所有的积性函数前缀和求解问题(个人感觉套上素数定理证明的复杂度的话应该要把下面的 log 改成 ln ,不过也差不多 ...
查询算法的流程 如果查询与当前结点的区域无交集,直接跳出。 如果查询将当前结点的区域包含,直接跳出并上传答案。 有交集但不包含,继续递归求解。 K-D Tree 如何划分区域 可以借助下文图片理解。 我们不仅可以将 K-D Tree 理解为一个高维二叉搜索树,通过某一维 ...
非旋FHQ Treap复杂度证明(类比快排) a,b都是sort之后的排列(从小到大) 由一个排列a构造一颗BST,由于我们只确定了中序遍历=a,但这显然是不能确定一棵树的形态的。 由一个排列b构造一颗Heap(大根),由于没有重复元素,然后人为钦定左儿子<右儿子,那么他的后序遍历=b ...