随笔分类 - 数据结构
摘要:LCA:最近公共祖先问题 解决方法: 1. 采用链式前行星存图,可以优化空间占用和遍历速度 2. Tarjan离线可以一次性处理所有的请求,时间复杂度为O(n+q) 下面简单介绍下Tarjan离线求LCA: 首先dfs遍历树,当某个结点左右子树都遍历完成后,处理所有与它有关的请求,然后将其利用并查集
阅读全文
摘要:题目链接 题意 将一棵二叉搜索树的结点按照从小到大的顺序构建成一个双向链表,要求不能创建新的节点。 思路 首先很容易想到对二叉树的中序遍历可以得到升序的结点序列。 其次,维护一个头结点head,和一个始终指向当前最后一个结点的prev。 因此每在第一步得到一个节点,就把它插入到prev的后面,并更新
阅读全文
摘要:区间修改,单点查询的问题(非线段树) + 因为线段树忘了具体的操作方式,所以不知道这个题线段树为啥不行,该补补线段树了 + 因为区间太大了,所以不能暴力直接对数组进行标记。 解决方案 采用设置两个容器(分别记为head,tail)的方法,分别存储一段区间的开头、结尾 + 假设head中有一个数i,则
阅读全文
摘要:1 //poj1195 二维线段树之树套树 2 // 先确定横坐标所在的区间并记录该结点的编号p,然后再确定纵坐标所在的区间并记录该结点的编号cur,则tree[cur][p]为目标区间。 3 #include <cstdio> 4 #include <cstdlib> 5 #include <cs
阅读全文
摘要:1 //zoj 2859 2 // 二维线段树之矩形树 求解矩阵和问题 3 #include <cstdio> 4 #include <cstdlib> 5 #include <cstring> 6 #include <cmath> 7 #include <algorithm> 8 #include
阅读全文
摘要:1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <iostream> 5 //#define INPUT 6 /** 7 Problem:1182 - 食物链,NOI2001 8 Begin Time:
阅读全文
摘要:牛客 Forsaken的三维数点 题目描述 Forsaken现在在一个三维空间中,空间中每个点都可以用(x,y,z)(x,y,z)表示。突然,三维空间的主人出现了,如果Forsaken想要继续在三维空间中呆下去,他就必须回答三维空间主人的问题。 主人会在空间中坐标为(x,y,z)(x,y,z)处加一
阅读全文
摘要:落谷3384 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 #include<queue> 7 #include<stack> 8 #inclu
阅读全文
摘要:1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <queue> 7 #include <stack> 8 #inclu
阅读全文
摘要:#include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> #include <queue> #include <stack> #include <deque> #incl
阅读全文
摘要:HDU 1251 AC代码 #include<cstdio> #include<cstdlib> #include<cstring> #include<string.h> #include<cmath> #include<algorithm> #include<queue> #include<sta
阅读全文
摘要:我感觉划分树的基本思想是二分和归并排序,分为建树和查询两个部分。 1、建树 递归建树,以中值为界,将序列划分成左右两部分,直到分到每个点为止。同时,在建树的过程中,记录下每一层进入左区间的数的个数,方便查询时使用。 注意:保持左右区间中数的相对顺序。 (1)、中值唯一的情况。将小于等于中值的数放到左
阅读全文
摘要:线段树几个基本操作 单点查询 单点修改 区间查询 区间修改 区间求最大值 主要思想: 将一个线性的一维数组构建成树形的数组,使得可以用二分的思想来进行区间操作,降低时间复杂度,但是多占用了空间,典型的用空间换时间。 一个特殊的模块: lazy数组,考虑到对区间的操作有很多次,并且没有必要每一次对区间
阅读全文
摘要:看了很长时间大佬的博客,终于明白了区间修改和单点查询的原理,因为大佬们的思维比较强大,所以菜鸡决定写一篇较为详细的解释。 首先引入差分数组d,设原数组为a,令d[i]=a[i]-a[i-1].由此关系式得,也就是a[j]等于d[j]的前 j 项和,即前缀和。 于此,我们的树状数组维护的是 d 的前缀
阅读全文

浙公网安备 33010602011771号