随笔分类 - 数据结构——树状数组/线段树/ST表
摘要:VIII.CF785E Anton and Permutation 我们看一下交换以后,哪些逆序对会受到影响。 设交换了位置,它们原本的值是。不妨设。 对于一个位置,在交换后仍然都排在它后面,不受影响; 对于一个位置,$
阅读全文
摘要:VII.[ZJOI2013]K大数查询 这题常卡的我快哭了QaQ 首先,我们仍然考虑树套树。 下标树套权值树(即我们前几题的一贯做法) 我们发现,要在区间树上打上区间添加数的tag,并且用tag树的并集进行二分。 因此最终的结果就是,大区间被分割成个小区间,但是每个小区间的$\log
阅读全文
摘要:VI.[CQOI2011]动态逆序对 这题需要支持查询前缀大于某个值的数量、后缀小于某个值的数量以及在某个地方插入值。 换句话说,我们要支持在以下标为轴,权值为轴的二维平面上动态删点以及询问矩形和。 如果我们把删点的时间看做轴的话,那就是典型的三维偏序。 直接树套树完成。 代码(常
阅读全文
摘要:V.【模板】三维偏序(陌上花开) 树套树比CDQ分治可爱一万倍!!!数据结构什么的最可爱了!!! 那么树套树如何进行三维偏序呢? 首先,第一维直接排序掉。 第二位用树状数组处理。 第三维套上权值线段树。 具体地说,因为我们要支持任何地方的单点修改以及前缀查询,就不得不套上树状数组。 这样,树套树便能
阅读全文
摘要:IV.【模板】二逼平衡树(树套树) 树状数组套权值线段树最好了……的复杂度可比的什么线段树套平衡树要强一百万倍!其实是我不会写 分析一下操作: 二分出来最大的的数后直接权值线段树上查询前缀和。 就是II.Dynamic Rankings。 直接修改。 权值
阅读全文
摘要:III.CF1093E Intersection of Permutations 首先,我们如果令表示在数组中出现的位置, 那么对于一次询问,答案就是中下标在间的数量。 思路1.树状数组套权值线段树
阅读全文
摘要:II.Dynamic Rankings 树状数组套权值线段树。 正经不带修的方法就是主席树(即一堆权值线段树并一起)。现在带修了,那就把这些主席树拆开,拆成棵权值线段树,然后用树状数组进行单点修改以及前缀求和,复杂度。 代码: #include<bits/stdc++
阅读全文
摘要:I.CF19D Points 树套树第一题。 思路1.线段树套线段树 因为内外的操作类似,很容易就能想到使用线段树套线段树,然后在线段树上二分来找到答案。 复杂度是,常数极大,因此被卡了。 代码: #include<bits/stdc++.h> using namespa
阅读全文
摘要:II.[HAOI2012]高速公路 本题已经在我的任务列表里挂了1年多了 我们将这里的“期望”转成“。然后,我们考虑使用线段树维护区间中任意两点间距离之和。 在每个节点上,我们维护如下东西: \(s
阅读全文
摘要:XVIII.[PA2017]Banany 心血来潮想开道动态点分治的题练手,然后被折磨了一下午…… 首先,套上点分树是没问题的。那么,怎样维护修改呢? 单点修改无论用什么结构维护都是非常easy的;但是边的修改就不太简单了,因为它涉及到不止一条路径。 我们设当前修改了边 。对于点分
阅读全文
摘要:XII.小清新数据结构题 太 清 新 了 话说就我一个人看到这道题后兴冲冲的以为暴力LCT就能过然后发现LCT如果维护子树信息的话只有根节点处的信息是正确的吗(没错,就我一个) 闲话少说,正片开始。 法一:推一种式子,然后LCT/树剖维护 我们设为节点的值,然后为根
阅读全文
摘要:IX.[BJOI2017]树的难题 debug三天,精神崩溃 论一行if(vis[v[x][r].second]){r++;continue;}忘记加上后所有代码全都莫名其妙TLE且查不出锅的痛苦 首先,我们考虑常规淀粉质。 我们考虑一条路径,它会被(淀粉质的分治根)截成两段。如果我们对于分治树中的
阅读全文
摘要:VII.[HNOI2015]开店 首先,第一种方法便是动态点分治。 我们先考虑忽略年龄限制的情形。 我们考虑正常求一个点到另一个点的距离应该怎么求—— 一般来说,我们会用对吧? 这个东西相当于将路径划分成两个部分,其中每个
阅读全文
摘要:VI.【模板】点分树 | 震波 我们之前讲过一个叫做淀粉徐的东西,但就跟dfs序一样,把树压成序列,总会损失一些信息。有没有方法能够完整地维护出来淀粉质的信息呢? 还真有。 我们看到在对于某个点淀粉质时,它的所有子树,都会拥有一个下层的分治节点。 我们看到淀粉质的代码: void solve(int
阅读全文
摘要:III.BZOJ3784: 树上的路径 思路1: 淀粉质。用priority_queue维护前长的路径的长度。用multiset维护点分治时,之前所有子树的路径长度,然后对于新子树中的每一条路径,在multiset中从大往小枚举另一半路径拼一起并尝试加入优先队列。如果加入失败,那么对于这个点,
阅读全文
摘要:XVIII.[八省联考2018]制胡窜 首先,本题parent tree上树上倍增+线段树合并找出每个点的 集合应该是没得说的。 于是我们现在考虑知道了 集合以及询问串长度 怎么求出答案。 首先,一个正常人稍微想
阅读全文
摘要:XVII.CF666E Forensic Examination 首先,同之前大部分题一样,本题仍然有两种解法。SA解法参见本人的题解。SAM解法见下。 仍然,同之前大部分题一样,本题SAM解法完爆SA——码量、思维难度、复杂度。 首先,考虑把所有东西怼一块跑广义SAM,然后对于询问的原串中某一段区
阅读全文
摘要:XVI.CF700E Cool Slogans 这题有SA和SAM两种做法,但事实证明,本题的SAM做法无论在思维难度还是在代码难度上,都爆踩SA做法。 首先,SA做法可以参见本人的题解。 然后,SAM做法见下。 首先,我们一定可以将每个串砍掉一部分,使得我们所需串中,前一个串必是后一个串的后缀。具
阅读全文
摘要:XV.CF1073G Yet Another LCP Problem 这里记录一下我在思考本题时的一个感悟,即后缀数组与后缀自动机的等价性。 众所周知,SA时有一个常见思路就是针对 height 数组建一棵笛卡尔树。但是,该笛卡尔树,唯一等价于SA针对的串的反串的parent tree。具体可以分别
阅读全文
摘要:XIV.CF1207G Indie Album 听说也可以AC自动机? 首先,我们针对题目中给出的trie树,跑一个广义SAM。然后,考虑我们询问一个串在trie上的某个节点的出现次数,就是询问当我们把此节点及其到根路径上的所有点加入SAM后,parent tree上该点子树中结尾点的数量。于是直接
阅读全文