随笔分类 - 数据结构
摘要:原题链接 题目分析 不难分析出来,我们就是要求出,对每一个位置i而言,其后面的比它大的位置j1,j2.....jn,构成的数学式子求解。 \[ ans[i]=2^{j_1-i-1}+2^{j_2-i-1}+...+2^{j_n-i-1} \] 我们可以对式子进行化简。 \[ ans[i]=\frac
阅读全文
摘要:可持久化数据结构 可持久化 首先需要介绍可持久化的概念。可持久化就是,保存下来的每一次变化,所影响的那些节点。干说会比较抽象,所以我们以两道题目为例子,来展示可持久化的作用和含义。 可持久化tire树 可以用一张图来展示,可持久化tire树的操作。 当我们,插入一个新节点时,直接从该节点指向除了要插
阅读全文
摘要:线段树 原理 线段树,就是把一段区间,不断二分,分为一颗二叉树,去维护区间信息。 算法结构 一个完整的线段树代码中,通常由六个部分组成 这里展示以一个简单的整数问题2为例 struct Node 节点部分,其中维护的是,关于线段树所有需要用到的信息。 这里需要着重说一下的是,一般我们的Node会开到
阅读全文
摘要:树状数组 时间复杂度 单点修改 O(logn) 区间查询 O(logn) 前置知识 lowbit()运算:非负整数x在二进制表示下最低位1及其后面的0构成的数值。 #define lowbit(x) x & -x 树状数组的思想 树状数组的本质思想是使用树结构维护”前缀和”,从而把时间复杂度降为O(
阅读全文
摘要:并查集 简单对并查集性质及其能解决的问题做一下总结 性质:传递性,和相互性 可以解决的问题 可以利用集合的特点,来进行判环。 并查集可以在划分集合时候,可以实现维护集合的大小和集合中元素距离根节点的距离。 带权并查集,便可以利用集合中元素到根节点的距离的操作,通过相对的距离,来判断不同的元素之间的关
阅读全文
摘要:原题链接 法一:带权并查集 分析: 通过分析题目,假设s[i]为前缀和数组,我们可以得到以下等效关系: [l,r]内1的个数 ⇔ s[r]-s[l-1] ⇔ 若为奇数,则s[l],s[r]奇偶性不同,若为偶数则相同 因此我们可以用带权并查集来解决这个问题。 我们在用带权并查集时,是维护了一个相对关系
阅读全文
摘要:原题链接 分析 分析题目后,我们可以 知道,我们要求的就是,维护并查集中每个元素到根节点的距离,同时维护集合的大小。 第一个需要解决的问题 如何维护当前战舰到根节点的距离 当我们把一列战舰放b到另一列战舰a后,我们如何更新,另一个队列b中每一个战舰到根节点的距离? 我们维护一个数组d,表示的是x到p
阅读全文
摘要:原题链接 分析 裸的ST表 ST表 初始化 倍增枚举出区间的最大值,f[N] [M]代表,从n开始长度为2^m的区间最值。 查询 [l,r] 1.求出该区间长度最接近的倍增预处理后的长度,k = log(len)/log(2); 2.最大值为 \[ Max=max(f[l][k],f[r-2^k+1
阅读全文

浙公网安备 33010602011771号