摘要: 看了一下题解里的zkw线段树,感觉讲的不是很清楚啊(可能有清楚的但是我没翻到,望大佬勿怪)。 决定自己写一篇。。。希望大家能看明白。。。 zkw线段树是一种优秀的非递归线段树,速度比普通线段树快两道三倍,同时代码量不大。 (当然,存在很多线段树可做zkw不可做的题) zkw线段树的核心思路就是先修改 阅读全文
posted @ 2018-10-19 22:03 Ilverene 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 天哪这道题竟然只有一篇题解! emm,首先读题看完两个操作就已经有很明确的思路了,显然是并查集+树的直径 一波解决。 并查集不多说了,如果不了解的可以看这里. 树的直径的思路很朴实,就是两边DFS(BFS也OK)。具体先随便找一个节点,然后搜一遍,找到最远的,然后再搜一遍,这样合在一起就一定是最长的 阅读全文
posted @ 2018-10-19 21:55 Ilverene 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 恩,这是AC的第一道树状数组呢。 本蒟蒻以前遇到RMQ问题一般都用线段树或ST表,可惜ST表不支持在线修改,而线段树代码量又太大。 如今终于找到了折中方案:树状数组!!!!代码量小,还支持修改! 树状数组也就是二叉索引树,又被称为Fenwick树,然而我个人认为它不能被严谨地成为树,因为充其量只是借 阅读全文
posted @ 2018-10-19 21:53 Ilverene 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 给你一个n*n的格子的棋盘,每个格子里面有一个非负数。 从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的和最大。 题目清晰明了,这道题应该用dp。 自然地想到$dp[i][j]$表示位置$(i, j)$的最大值,但是在状态转移的时候推不出来 阅读全文
posted @ 2018-10-19 21:48 Ilverene 阅读(316) 评论(0) 推荐(0) 编辑
摘要: 假如做这道题想着用如下朴实的模拟,那肯定要WA至少4个点。 原因在于,数据大小。。。(2^63-1) 就比如说第二个点,输入数据如下: 140737488355336 140737488355456 能过才是奇迹。。。 那么显然我们应该使用位运算。 在这里先普及一下这玩意,尽管我觉得大家都会。。。 阅读全文
posted @ 2018-10-19 21:46 Ilverene 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 又是一道线段树。。。 本题其实是一道裸题。。。不明白为什么是这个难度标签。 思路很明显,用tree[i].val表示区间内开着的灯的数量。 然后常规操作(建树、查询、修改)就可以了。 最后:lazy tag是个好东西。 话说回来。。。这道题好像在洛谷上有不知一道重题,可以n倍经验了!! 阅读全文
posted @ 2018-10-19 21:45 Ilverene 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 说起来这还是蒟蒻AC的第一道省选线段树呢。 这道题和其他线段树最大的不同就是在于本题数组一直在增大。 寻常的线段树蒟蒻习惯用如下的结构体储存,然而对于此题就不行了: 这是因为这道题没有用建树,因此l, r就不存在啊! 那么解决方法就是用朴实的tree数组储存val, l和r则手动传入函数!! 所以根 阅读全文
posted @ 2018-10-19 21:43 Ilverene 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 这道题明明是裸的线段树,蒟蒻却80分了五六次。。。 根据题意,显然是维护一棵单点修改区间查询的线段树,于是直接套区间修改的代码。。。 结构体,即为树上的节点。 建树,注意:将读入放到这里来!!原本是在main里面读入然后储存到stu数组中,结果就一直80分!! 区间修改函数: 1. 如果直接是要求的 阅读全文
posted @ 2018-10-19 21:42 Ilverene 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 这道题带坑,假如没有发现肯定会爆。 首先先搜索一遍0和5,储存在数组a里面。 那么应当有2 ^ a1 +2 ^ a2 +...+ 2 ^ an。 然而这道题没那么简单,数串还可以重复k次。 因此,需要在此基础上在乘上1 + 2 ^ l + 2 ^ 2l +...+ 2 ^ (k - 1)l。其中l为 阅读全文
posted @ 2018-10-19 21:40 Ilverene 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 这是一道单点修改,区间查询的线段树。 需要实现的操作有三个:建树,更新与查询。 首先,线段树用结构体维护,如下: 其中l, r表示节点所表示区间左右端点,而val则是区间和。 Build函数如下: 这个函数就是初始化整棵线段树,没有什么特别需要解释的。 Update函数如下: x表示需要修改的节点, 阅读全文
posted @ 2018-10-19 21:38 Ilverene 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 说起来这还是本蒟蒻学完Floyd之后做的第一道题。 emm...这是一道裸题,题目大致是说有一堆岛,岛之间有海盗,因此每一条边都有一个危险指数(权重),然后给出一段必须经过的路线,求从一号小岛走到N号小岛最小的危险指数是多少。 先介绍一下Floyd算法吧: Floyd(弗洛伊德)算法是用来求解带权图 阅读全文
posted @ 2018-10-19 21:37 Ilverene 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 这道题要坑死人啊。。。 第一次做40分,其他RE,改了一次之后就变成20分了。。。 究其原因,是有一个数组(dis)开的太小了,于是最后本蒟蒻就随手开了个五百万,然后,就AC了。 看到有一篇题解说求距离最好不开根,经本蒟蒻实验,开不开根并不影响结果,全看个人喜好。 本蒟蒻还加了一个快读,其实也没有必 阅读全文
posted @ 2018-10-19 21:35 Ilverene 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 又是一道Kruskal题目。 AC代码见下。 主要思路就是将所有的边储存起来,然后进行贪心地选择,期间需要判断两个端点是否有关联,这一过程通过并查集实现。Kruskal部分套模板就可以了。 阅读全文
posted @ 2018-10-19 21:34 Ilverene 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 貌似珂朵莉树是目前为止(我学过的)唯一一个可以维护区间x次方和查询的高效数据结构。 但是这玩意有个很大的毛病,就是它的高效建立在数据随机的前提下。 在数据随机的时候assign操作比较多,所以它的复杂度会趋近于mlogn(m为询问次数)。假如出题人想要卡珂朵莉树的话,那肯定是会T得没边。 因此不要指 阅读全文
posted @ 2018-10-19 16:00 Ilverene 阅读(1107) 评论(2) 推荐(0) 编辑
摘要: 刚刚恶补了替罪羊树,由于一个指针出锅调了贼久,必须得写一篇题解巩固一下理解。 参考了ikka大佬的博客,我的替罪羊树就是在那里学会的。 替罪羊树是一种优越的平衡树,它不像Splay和Treap有着绚丽的旋转操作,而是朴实地暴力重构。 具体来说,为了保持树结构的平衡,替罪羊树在每一次插入和删除的时候都 阅读全文
posted @ 2018-10-19 15:53 Ilverene 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 这道题明明没有省选难度啊,为什么就成紫题了QAQ 另:在CF上A了但是洛谷Remote Judge玄学爆零。 思路是DFS序+线段树。 首先这道题直观上可以对于每一次修改用DFS暴力O(n),然后对于询问O(1)解决。 但是这个方法实在是太耗时间了,因此我们想到了dfs序。 所谓dfs序,就是按照d 阅读全文
posted @ 2018-10-19 15:46 Ilverene 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 嚯嚯嚯,这道题很显然是削弱版的51nod P1042。 那么显然我们需要使用数位DP解题。 思路大致是这样的: 对于每一个数字,考虑三种影响关系: 1. 它对低位的影响 2. 它对高位的影响 3. 高位对低位的影响 然后在递归中实现这三种关系的计算即可。 AC代码: 阅读全文
posted @ 2018-10-19 15:43 Ilverene 阅读(201) 评论(0) 推荐(0) 编辑