随笔分类 -  数据结构—线段树

1
摘要:LCT好题 首先我们考虑实际询问的是什么: 从LCT的角度考虑,如果我们认为一开始树上每一条边都是虚边,把一次涂色看作一次access操作,那么询问的实际就是两个节点间的虚边数量+1和子树中的最大虚边数量! 这种问题显然树上容斥,如果设disi表示i到根节点需要经过多少虚边,那么答案显 阅读全文
posted @ 2019-07-10 12:43 lleozhang 阅读(178) 评论(0) 推荐(0) 编辑
摘要:真·小清新... 其实本题正解是动态点分治,但是考虑到那个东西需要先大力推导一波再套上一个幻想乡战略游戏的搞法,所以还不如大力推导一波,然后无脑套上一个树剖+线段树写法... 首先我们考虑没有换根操作: 没有换根操作时,设每次修改的变化量为δ,很显然每次修改时只会影响一条树链上的贡献, 阅读全文
posted @ 2019-07-10 08:57 lleozhang 阅读(163) 评论(0) 推荐(0) 编辑
摘要:神题啊... 首先我们考虑68分的暴力: 对于询问串的每个位置i,我们维护一个limi表示以i为终点向前至多能与模式串匹配多长,这一点可以在把询问串放在模式串的后缀自动机上跳跃得到 接下来考虑统计答案: 对于询问串同样建起一个后缀自动机,我们知道后缀自动机上的每个节点维护的位置是一 阅读全文
posted @ 2019-07-05 20:48 lleozhang 阅读(171) 评论(0) 推荐(0) 编辑
摘要:线段树优化建图板子题 首先暴力建图显然是不可取的,但是我们发现建图要求是点和区间之间的问题,所以考虑用线段树优化 但是怎么优化呢? 如果用一棵线段树很难处理同时出边和入边,因此我们考虑用两棵线段树(类似拆点),一棵线段树作为起点,另一棵线段树作为终点,然后在两棵线段树之间连边即可 这样的话连边的方式 阅读全文
posted @ 2019-07-04 11:01 lleozhang 阅读(454) 评论(0) 推荐(0) 编辑
摘要:首先是动态dp了嘛... 然后考虑怎么做:首先列出dp方程,大概长这样: f[i]=min(v[i],f[to]) 看着不太像动态dp呀... 考虑拿出重儿子的贡献,然后套模型,大概能构造出一个这样的东西: 设gi=fto[to!=son] $\begin{p 阅读全文
posted @ 2019-07-02 08:40 lleozhang 阅读(194) 评论(0) 推荐(0) 编辑
摘要:首先我们考虑事件发生的真正的先后顺序 我们考虑在某一个点f的子树内有两点ij先后在ti,tj两个时间向上发送信息 那么两者谁会先传到f呢? 推个小式子:设i先到达f,那么一定要满足的条件是depidepf+ti<$dep_{j}- 阅读全文
posted @ 2019-07-01 10:15 lleozhang 阅读(262) 评论(0) 推荐(1) 编辑
摘要:首先有个思想,就是逐层更新 然后考虑每次查询是查从某一点到根节点的树链上的信息,因此用树链剖分维护即可,处理每个点的对子树中节点的贡献可以区间修改(只需修改这一节点向上的树链即可),然后查询时区间查询,去掉不合法的部分即可 时间复杂度O(nlog22n),其实本题正解应当是$O(nl 阅读全文
posted @ 2019-06-28 11:17 lleozhang 阅读(222) 评论(0) 推荐(0) 编辑
摘要:去年noip题啊... 这题动态dp裸题,因此直接套上去嘛! 动态dp板子看这里 设状态f[i][0/1]表示点i选/不选的最小花费,转移有 f[i][0]=f[son][1] f[i][1]=wi+min(f[son][0],f[son][1]) 同样设一 阅读全文
posted @ 2019-06-26 20:37 lleozhang 阅读(129) 评论(0) 推荐(0) 编辑
摘要:动态dp是一个毒瘤且奇葩的东西... 然而noip2018出了这个东西... 因此... 以一道题为例吧:给出一棵带点权的树,每次修改一个点的点权,查询这棵树的最大权独立集(可以理解为每次询问一遍“没有上司的舞会”) 首先考虑暴力: 设状态f[i][0/1]表示以i为根的子树,点i选或不 阅读全文
posted @ 2019-06-26 19:04 lleozhang 阅读(218) 评论(0) 推荐(0) 编辑
摘要:数据范围很重要!!! 首先观察数据范围,发现我们要修的桥的数量只能是一座或两座,因此我们直接讨论即可 对于在河的一侧的人家,显然花费是一定的,直接累计即可 对于在河两侧的人家,显然过河的花费是一定的,直接累计即可 接下来讨论的所有人都在桥的两侧 首先我们假设只有一座桥,位置为x,设对于第i阅读全文
posted @ 2019-06-25 10:33 lleozhang 阅读(154) 评论(0) 推荐(0) 编辑
摘要:线段树维护概率好题 设状态f(i)表示从i走到终点的概率 不妨令起点为1,终点为n 那么有转移:f(i)=(1p(i))f(i1)+p(i)f(i+1) 移项,得: p(i)[f(i+1)f(i1)]=f(i)f(i1)g(i)=f(i)f(i1) 阅读全文
posted @ 2019-06-04 20:08 lleozhang 阅读(280) 评论(0) 推荐(0) 编辑
摘要:一道看似是期望,其实与期望关系并不是特别大的题... 首先分析一下题意: 虽然题目中提到的是边,但事实上完全可以把每一条边的贡献放进左端点上(因为无论从哪个方向经过这条边都是计算左端点的代价) (题目中的提示多么明显啊!!!收费站显然是按点收费嘛...) 因此,在修改区间[l,r]的边权时,我们 阅读全文
posted @ 2019-05-30 21:20 lleozhang 阅读(178) 评论(1) 推荐(0) 编辑
摘要:极其神的一道题 首先看到:环上问题并不好做,所以我们按套路拆环之后扔到序列上 接下来,我们来分析一下这个游戏的最优策略 最优策略一般有两种表述,这里一并给出 ①:在原地等到某一个时间点从某一个起点开始走,不停留地恰好走完一圈达到结束,取所有可行方案中最小值 ②:从某一个点为起点开始走,对每个点如果没 阅读全文
posted @ 2019-05-21 19:35 lleozhang 阅读(172) 评论(1) 推荐(0) 编辑
摘要:一道用线段树维护单调栈的典型问题 首先不难把问题转化成一个斜率模型,设任意一栋楼坐标为xi,高度为yi,那么这栋楼的“斜率”即为yixi 那么不难发现,题目要求的是一个斜率上升的序列,而且必须从前向后依次选择 那么首先考虑暴力,不难发现,暴力每求一次是$ 阅读全文
posted @ 2019-05-21 19:00 lleozhang 阅读(166) 评论(1) 推荐(0) 编辑
摘要:和上一题很像,而且这题直接给出了单点修改和区间查询,所以还是两棵线段树容斥即可 阅读全文
posted @ 2019-04-30 15:35 lleozhang 阅读(175) 评论(0) 推荐(0) 编辑
摘要:动态点分治裸题 首先介绍一下动态点分治:就是带修改操作的点分治(废话) 操作涉及单点查询和区间修改 那么首先应该想到线段树 但是怎么操作呢? 首先,修改一个点时的影响范围可以分为上下两部分:一部分在自己的子树内,另一部分通过自己的父节点传上去或传到其他子树内 那么为了使这种操作复杂度尽可能低,我们用 阅读全文
posted @ 2019-04-30 15:33 lleozhang 阅读(173) 评论(0) 推荐(0) 编辑
摘要:非常好的一道题,是线段树的常见玩法 将字符串转化为1~26个数 对区间开一棵线段树,用两个数组分别维护区间中1~26每个数的个数以及一个区间覆盖标记,表示这个区间是否被某一个值覆盖了 在每次排序时,首先查出这个区间中1~26每个数出现的次数,然后因为是排过序的,所以相等的数排完序之后一定是连续的一段 阅读全文
posted @ 2018-10-17 14:05 lleozhang 阅读(235) 评论(0) 推荐(0) 编辑
摘要:好玄学的线段树啊... 调了半天的题,最后发现是传参的数据类型传错了(long long 传成了int),结果RE3小时... 说下思路吧... 其实主题思想很简单,就是把一个二进制数作为一个序列建立一棵线段树,然后各种维护即可 当然这样会TLE或MLE之类的 所以我们采用其他的策略:压位!!! 这 阅读全文
posted @ 2018-09-06 16:07 lleozhang 阅读(165) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2018-09-03 20:29 lleozhang 阅读(2) 评论(0) 推荐(0) 编辑
摘要:学习扫描线ing... 玄学的东西... 扫描线其实就是用一条假想的线去扫描一堆矩形,借以求出他们的面积或周长(这一篇是面积,下一篇是周长) 扫描线求面积的主要思想就是对一个二维的矩形的某一维上建立一棵线段树,然后把另一维按高度排序,从下向上枚举即可。 主题思想其他博客说的很明白了,这里重点记录一下 阅读全文
posted @ 2018-08-29 20:26 lleozhang 阅读(155) 评论(0) 推荐(0) 编辑

1
levels of contents
点击右上角即可分享
微信分享提示