随笔分类 -  ACM-数据结构

摘要:李超线段树 用来维护二维平面上很多条线段(直线)在x = x0上的最值问题 定义: 1.永久化标记:即线段树标记不删除,每个结点维护的也不一定是最优的信息,需要查询的时候一路统计标记达到最优 2.优势线段:李超树每个节点含有一个优势线段,意为完全覆盖当前区间且在当前区间mid处相比于其他该位置线段最 阅读全文
posted @ 2019-09-02 23:27 Hugh_Locke 阅读(456) 评论(0) 推荐(0) 编辑
摘要:静态无修又是连续,模拟赛的时候很快就想到了莫队 + 回滚并查集 但是众所周知并查集并不支持删除操作,回滚并查集也只能按顺序删除 赛后得知有一个叫做回滚莫队的操作,即将左端点按照块排序,相同的块按照右端点从小到大排序 然后将所有左端点相同的块一起处理,因为右端点递增所以右端点很显然只有插入操作, 对于 阅读全文
posted @ 2019-08-20 20:16 Hugh_Locke 阅读(360) 评论(1) 推荐(0) 编辑
摘要:https://cn.vjudge.net/problem/2057332/origin 题目的询问为L - R之间的两人曼哈顿距离最长 将曼哈顿距离转切比雪夫距离,线段树维护区间内的最(次)大x和最(次)小x,并且最大次大,最小次小的种族不同 y轴同理,建两颗线段树即可,询问的时候查询区间最大小值 阅读全文
posted @ 2019-08-12 20:21 Hugh_Locke 阅读(383) 评论(0) 推荐(0) 编辑
摘要:题意:序列操作1.末尾加数 2.求区间异或最大值。 求区间异或的最大值很容易就想到用线性基去做 比赛的时候试了分块和线段树去维护线性基,结果都TLE了 之前也想到了维护后缀线性基,但是不知道怎么处理区间,没想到是在线性基里维护出现的位置 正解应该是对每一个后缀维护一个线性基,每次插入元素的时候都在最 阅读全文
posted @ 2019-07-23 15:10 Hugh_Locke 阅读(207) 评论(0) 推荐(0) 编辑
摘要:https://www.luogu.org/problemnew/show/P1501 题意 第一眼觉得只要直接树剖就可以了,但是仔细看了看操作2好像并不简单,树剖没法直接变树。 所以需要用到LCT(link-cut tree)实现操作2,至于操作1,3,4,原本线段树在维护区间和的时候,遇到区间加 阅读全文
posted @ 2019-07-10 14:51 Hugh_Locke 阅读(191) 评论(0) 推荐(0) 编辑
摘要:https://ac.nowcoder.com/acm/contest/358#question 出题人有一个n个点,m条边的无向图,点有属性ai和bi,以及一个神秘常数kk 有q组询问,每组询问给出正整数v,k和k个点 对于每个询问,在原图中删去(给定的k个点所在的连通块)和(属性ai大于v的点) 阅读全文
posted @ 2019-05-31 23:44 Hugh_Locke 阅读(246) 评论(0) 推荐(0) 编辑
摘要:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4100 比赛的时候封榜开始开这题,因为我的愚蠢没有开出来。 查询的最小值不用多说,维护一个当前的联通快数量num, max(num - K,1LL)就是答案,问题在于最大值。 阅读全文
posted @ 2019-05-10 14:08 Hugh_Locke 阅读(220) 评论(0) 推荐(0) 编辑
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=3674 用可持久化数组维护并查集的fa数组, 查询时间复杂度为nlognlogn,一个log是并查集的时间复杂度,采用按秩合并的操作,需要注意的是按秩合并的秩意思为当前最大结点下的树的最大深度。 另一 阅读全文
posted @ 2019-03-25 18:53 Hugh_Locke 阅读(178) 评论(0) 推荐(0) 编辑
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=3932 题意:给出一些带有等级的线段,求一点上前K小个等级线段的等级之和 询问是对于每一个点询问前K小的和,比较容易想到的是对每一个点都建立一颗权值线段树,维护点的数量和点的等级和。 问题是空间太大, 阅读全文
posted @ 2019-02-21 22:39 Hugh_Locke 阅读(265) 评论(0) 推荐(0) 编辑
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=2588 题意:强制在线的询问树链权值第K小(无修) 这种类似于第K小的题,一般容易想到主席树,但是树链并不能不是一个按顺序的序列,使用树链剖分也不太容易维护几条链之间的第K小关系。 但是可以从主席树的 阅读全文
posted @ 2019-02-16 13:44 Hugh_Locke 阅读(238) 评论(0) 推荐(0) 编辑
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=4627 题意:求序列中和在L到R之间的字串种数。 要求的是和的范围,我们可以考虑先求一个前缀和pre,然后每个点j的贡献就是L <= pre[j] - pre[i] <= R(i < j)的i的种数了 阅读全文
posted @ 2019-02-15 20:57 Hugh_Locke 阅读(222) 评论(0) 推荐(0) 编辑
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=2049 线段树真神奇 题意:给出一波操作,拆边加边以及询问两点是否联通。 听说常规方法是在线LCT,留坑。 如果说这个删边的操作是删除上一条边,那这自然是可撤销并查集的模板题,直接在线维护就可以了。 阅读全文
posted @ 2019-02-12 22:57 Hugh_Locke 阅读(412) 评论(0) 推荐(0) 编辑
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=2006 题意:在长度N的序列中求K段长度在L到R之间的区间,使得他们的和最大 很容易想到要求一个前缀和。 然后每一个位置i就对应后面的一段i + L - 1 ~ i + R - 1的区间,如果考虑暴力 阅读全文
posted @ 2019-02-12 11:41 Hugh_Locke 阅读(196) 评论(0) 推荐(0) 编辑
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=4653 首先很容易想到离散之后排序,用线段树或者树状数组去维护。 问题在于按照什么排序,如果按照左端点右端点排序,线段树就需要维护最大值最小值和区间和等等信息,在区间和超过M之后最大值就变为了K大到最 阅读全文
posted @ 2019-02-11 13:27 Hugh_Locke 阅读(213) 评论(0) 推荐(0) 编辑
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=3531 首先这题意要求树链上的最大值以及求和,其树链剖分的做法已经昭然若揭 问题在于这次的信息有宗教条件下的限制,导致不那么容易维护。 第一个想法自然是对于每一个宗教都建一颗线段树,看一下数据范围,宗 阅读全文
posted @ 2019-02-10 22:22 Hugh_Locke 阅读(203) 评论(0) 推荐(0) 编辑
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=2157 现在就是后悔,非常后悔 本来想随便拿个树剖热身,不料开了个毒瘤题。 题意:动态维护一棵树上的链最大值,最小值,和,修改的操作是一条链全部取反以及一条边单点修改 边转点是肯定要边转点的,把所有的 阅读全文
posted @ 2019-02-09 10:39 Hugh_Locke 阅读(241) 评论(0) 推荐(0) 编辑
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=4326 题意:N个点的树上给M条树链,问去掉一条边的权值之后所有树链长度和的最大值最小是多少。 首先想到去掉的树边一定是最长链上的树边,所以产生的思路就是寻找出一条询问里的最长链之后依次枚举上面所有的 阅读全文
posted @ 2019-01-16 15:18 Hugh_Locke 阅读(192) 评论(0) 推荐(0) 编辑
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=2243 新学的树剖,在维护的时候线段树维护区间内颜色数量以及左右两端的颜色。统计的时候区间合并时判断中间的合并点颜色是否相等,相等则ans -1 在计算答案的时候不同的链上两端跳的过程中也要注意col 阅读全文
posted @ 2019-01-14 16:25 Hugh_Locke 阅读(134) 评论(0) 推荐(0) 编辑
摘要:http://codeforces.com/problemset/problem/992/E 题意:给定一个序列 ai​ ,记其前缀和序列为 si​ ,有 q 个询问,每次单点修改,询问是否存在一个 i 满足 ai​=si−1​,有多解输出任意一个,无解输出 -1。 思路一:构造一个b[i] = a 阅读全文
posted @ 2018-11-18 15:01 Hugh_Locke 阅读(419) 评论(0) 推荐(0) 编辑
摘要:http://codeforces.com/problemset/problem/1051/E 题意:给你一个很大的数字,然后你可以把这个数字拆分成为任意多个部分,要求每一个部分的数字大小要在一个区间内,问有多少种拆分方式。 很容易看出这是一个dp,用dp[i]表示到i之前位置总共的数量,再用l[i 阅读全文
posted @ 2018-11-17 15:44 Hugh_Locke 阅读(265) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示