![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
lleozhang
这个作者很懒,什么都没留下…
展开
-
hdu 1542 线段树+扫描线 学习
学习扫描线ing... 玄学的东西... 扫描线其实就是用一条假想的线去扫描一堆矩形,借以求出他们的面积或周长(这一篇是面积,下一篇是周长) 扫描线求面积的主要思想就是对一个二维的矩形的某一维上建立一棵线段树,然后把另一维按高度排序,从下向上枚举即可。 主题思想其他博客说的很明白了,这里重点记录一下细节问题: 下面认为对横坐标建立线段树扫描纵坐标: 首先,由于读入的都是浮点数,所以我们...原创 2018-08-29 20:26:01 · 181 阅读 · 0 评论 -
CF558E
非常好的一道题,是线段树的常见玩法 将字符串转化为1~26个数 对区间开一棵线段树,用两个数组分别维护区间中1~26每个数的个数以及一个区间覆盖标记,表示这个区间是否被某一个值覆盖了 在每次排序时,首先查出这个区间中1~26每个数出现的次数,然后因为是排过序的,所以相等的数排完序之后一定是连续的一段区间,这样如果升序,我们就对整个区间从小到大进行覆盖,否则从大到小覆盖 最后遍历整棵线段树输...原创 2018-10-17 14:05:13 · 334 阅读 · 0 评论 -
SPLAY,LCT学习笔记(六)
这应该暂时是个终结篇了... 最后在这里讨论LCT的一个常用操作:维护虚子树信息 这也是一个常用操作 下面我们看一下如何来维护 以下内容转自https://blog.csdn.net/neither_nor/article/details/52979425 对于一个点x,如果我们对x进行access操作,那么他的虚子树内将包含且仅包含他原树中子树内除了他自己以外的所有点,这时如果我们维护...原创 2018-09-18 18:46:32 · 208 阅读 · 0 评论 -
SPLAY,LCT学习笔记(五)
这一篇重点探讨LCT的应用 例:bzoj 2631 tree2(国家集训队) LCT模板操作之一,利用SPLAY可以进行区间操作这一性质对维护懒惰标记,注意标记下传顺序和如何下传 #include <cstdio> #include <cmath> #include <cstring> #include <cstdlib> #include ...原创 2018-09-18 18:19:55 · 185 阅读 · 0 评论 -
SPLAY,LCT学习笔记(四)
前三篇好像变成了SPLAY专题... 这一篇正式开始LCT! 其实LCT就是基于SPLAY的伸展操作维护树(森林)连通性的一个数据结构 核心操作有很多,我们以一道题为例: 例:bzoj 2049 洞穴勘测 要求:加边和删边,询问连通性 其实如果没有删边,裸跑并查集似乎就可以搞定 但由于存在删边,并查集思想受阻,我们要考虑更高级的数据结构 于是LCT横空出世! LCT的核心思想:多...原创 2018-09-18 18:05:18 · 343 阅读 · 0 评论 -
bzoj 1112 poi 2008 砖块
这滞胀题调了两天了... 好愚蠢的错误啊... 其实这道题思维比较简单,就是利用treap进行维护(有人说线段树好写,表示treap真心很模板) 就是枚举所有长度为k的区间,查出中位数,计算代价即可。 (根据绝对值不等式的几何意义,中位数一定是最优解) 而维护长度为k的区间也很简单,就是首先把前k个扔到树上,然后每次把新来的插入,把最前面的一个删除即可 至于求中位数,简直就是基础操作嘛...原创 2018-09-07 18:26:16 · 130 阅读 · 0 评论 -
SPLAY,LCT学习笔记(三)
前两篇讲述了SPLAY模板操作,这一篇稍微介绍一下SPLAY的实际应用 (其实只有一道题,因为本蒟蒻就写了这一个) 例:bzoj 1014火星人prefix 由于本蒟蒻不会后缀数组,所以题目中给的提示完全没看懂 不过并不影响我们做这道题,因为正解好像不用后缀数组... 首先,如果这题没有插入和修改,那么我们只需二分+hash即可 (很显然,二分相同前缀的长度,用hash检查是否合法) ...原创 2018-09-17 20:34:40 · 162 阅读 · 0 评论 -
bzoj 1503 郁闷的出纳员
treap裸题... 还是要写一下,毕竟是第一个成功用treap维护的题,做个纪念吧 这题的中心思想其实很简单,就是插入+删除+查询排名为x的数 但是重点是,全体的标记怎么处理? 首先有一个很显然的思想,就是在修改全体的时候,我们不去修改全体的值,而是去修改界限 但这样做有一个很显然的问题:界限修改了,新来的值怎么办? 所以我们对这个思想进行一个优化,我们维护两个值,一个是minv,一...原创 2018-09-06 18:54:17 · 103 阅读 · 0 评论 -
NOI 2017 整数
好玄学的线段树啊... 调了半天的题,最后发现是传参的数据类型传错了(long long 传成了int),结果RE3小时... 说下思路吧... 其实主题思想很简单,就是把一个二进制数作为一个序列建立一棵线段树,然后各种维护即可 当然这样会TLE或MLE之类的 所以我们采用其他的策略:压位!!! 这里我选择压60位。 然后我们考虑:对一次修改操作,我们如何处理? 首先,我们看一下这...原创 2018-09-06 16:06:53 · 416 阅读 · 0 评论 -
SPLAY,LCT学习笔记(二)
能够看到,上一篇的代码中有一段叫做find我没有提到,感觉起来也没有什么用,那么他的存在意义是什么呢? 接下来我们来填一下这个坑 回到我们的主题:NOI 2005维修数列 我们刚刚讨论了区间翻转的操作方法,接下来我们来考虑区间插入和区间删除的方法。 有了上一篇的铺垫,大家应该能看都,这两个操作方法是一致的,就是将区间前驱转到根,后继转到根的右节点。 所以当我们插入一段区间的时候,我们还是...原创 2018-09-15 16:45:21 · 173 阅读 · 0 评论 -
SPLAY,LCT学习笔记(一)
写了两周数据结构,感觉要死掉了,赶紧总结一下,要不都没学明白。 SPLAY专题: 例:NOI2005 维修数列 典型的SPLAY问题,而且综合了SPLAY常见的所有操作,特别适合新手入门学习(比如我这种蒟蒻) 题目要求很多,我们一步一步来分析 首先,区间翻转是SPLAY一个很基础的操作,我们以他为基础分析这个SPLAY 例:luogu文艺平衡树 题目:读入一个序列,进行多次区间翻转操...原创 2018-09-15 16:24:50 · 383 阅读 · 0 评论 -
noip2018 雅礼模拟赛day1 T1
分块... 首先我们可以看到,对于任意的模数k,所有的可能答案一定会在所有k的整数倍的前驱处取到 证明:假设所有值均小于k,那么我们显然答案是这其中的最大值 假设所有值均小于2k,那么我们将这些值分成两部分,小于k的部分中的最大值即为取模k的最大值,而在[k,2k]之间的部分取模k即相当于-k,所以与2k最接近的值即为取模k的最大值,两者取最大即为整体取模k的值 那么我们对整个序列进行分块...原创 2018-10-20 11:21:07 · 223 阅读 · 0 评论