随笔分类 -  数据结构

摘要:学习了后缀数组,简单谈一下个人理解。 阅读全文
posted @ 2018-01-24 14:33 Melacau 阅读(469) 评论(0) 推荐(0)
摘要:Description 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池。这 n 个城池用 1 到 n 的整数表示。除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖,其中 fi 每个城池有一个防御值 hi,如果一个骑士的战斗力大于等于城池的生命值,那么骑士就可以占领这 阅读全文
posted @ 2017-11-19 10:57 Melacau 阅读(333) 评论(0) 推荐(0)
摘要:Background 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿。 Description 在这个帮派里,有一名忍者被称之为Master。除了Master以外,每名忍者都有且仅有一个上级。为保密,同时增强忍者们的领导力,所有与他们工作相关的指令总是由上级发送给他的直接 阅读全文
posted @ 2017-11-17 21:37 Melacau 阅读(253) 评论(0) 推荐(0)
摘要:左偏树 Noip大概率翻皮水了,然后先继续xjb学习吧,顺便文化课也是翻皮水大队的:( 今天介绍一种特殊的数据结构:可并堆中的一种 左偏树(好吧其实是因为这种简单易懂代码复杂度较低). 基本介绍 左偏树,故名思义,它是颗向左倾斜的树,其实,它还是棵二叉树,再者,它还具有堆的性质,but,它不是堆. 阅读全文
posted @ 2017-11-17 21:29 Melacau 阅读(2406) 评论(3) 推荐(1)
摘要:Description ​ 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N 1条道路,并且任何两个村庄之间有且仅有一条路径可达。游戏开始时,玩家可以任意选择一个村庄,瞬间转移到这个村庄,然后可以任意在地图的道路上行走,若走到某个村庄中有宝物,则视为找到该村庄内的宝物,直到找到所有宝物并返 阅读全文
posted @ 2017-10-30 09:52 Melacau 阅读(232) 评论(0) 推荐(0)
摘要:Description 现在请求你维护一个数列,要求提供以下两种操作:1、 查询操作。语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。限制:L不超过当前数列的长度。2、 插入操作。语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t 阅读全文
posted @ 2017-09-19 13:37 Melacau 阅读(144) 评论(0) 推荐(0)
摘要:在学习数据结构的路上渐行渐远。。。 学习了主席树(可持久化线段树)/(函数式线段树)。 简单的介绍一下可持久化数据结构的意思,大概就是可以保存历史版本的数据结构。 对于线段树而言,其的可持久化就是对每次操作建立不同版本的线段树,但显然,这样的时空复杂度过大,是不可接受的。 考虑只有单点修改的情况,一 阅读全文
posted @ 2017-08-23 12:48 Melacau 阅读(341) 评论(0) 推荐(0)
摘要:"原题传送门" Description 有N个村庄坐落在一条直线上,第i(i 1)个村庄距离第1个村庄的距离为Di。需要在这些村庄中建立不超过K个通讯基站,在第i个村庄建立基站的费用为Ci。如果在距离第i个村庄不超过Si的范围内建立了一个通讯基站,那么就成它被覆盖了。如果第i个村庄没有被覆盖,则需要 阅读全文
posted @ 2017-08-21 12:39 Melacau 阅读(258) 评论(0) 推荐(0)
摘要:"原题传送门" Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn]。现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置。换句话说,就是使得存在一个 x,使得对于每一个被选中的区间 [li,ri],都有 li≤x≤ri。 对于一个合法的 阅读全文
posted @ 2017-07-11 13:36 Melacau 阅读(230) 评论(0) 推荐(0)
摘要:"原题链接" Description After doing Ray a great favor to collect sticks for Ray, Poor Neal becomes very hungry. In returnfor Neal's help, Ray makes a great 阅读全文
posted @ 2017-07-07 14:31 Melacau 阅读(404) 评论(0) 推荐(0)
摘要:"原题传送门" 题意简析 给定一个区间,可以在这个区间上每个整数点插入若干个数(这些数数值可以重复)你需要支持2种操作: 1)在[a,b]间所有整数点插入c 2)查询[a,b]内第c大的数 解题思路 树套树裸题,外层是权值线段树,内层是普通线段树,通过将操作1的c离散后维护即可。 总复杂度均为$O( 阅读全文
posted @ 2017-05-21 10:57 Melacau 阅读(233) 评论(0) 推荐(0)
摘要:原题传送门 因为马上要开始搞树套树了,所以学了一波权值线段树。。。毕竟是会点zkw线段树的,所以zkw线段树大法好! 解题思路: 介绍一下权值线段树吧,其实感觉就是线段树的本义,就是你用线段树维护了数轴上的一段区间,然后统计这个区间内被覆盖的点的数量(我们认为同一个点可以被覆盖多次) 然后这题你就直 阅读全文
posted @ 2017-05-16 14:42 Melacau 阅读(610) 评论(0) 推荐(0)
摘要:传送门(因为BZOJ上没有题面...所以放的是luogu的) 题意:你需要维护一个序列,支持区间翻转与查询区间最小。 解题思路:由于区间最小实际上每一次就是对应的整个数列的第k小,因此可以直接预处理解决,接下来考虑如何找到这个点,可以直接用一个指针解决,然后就是简单的无旋treap操作: 给定一个平 阅读全文
posted @ 2017-05-15 16:24 Melacau 阅读(494) 评论(0) 推荐(1)
摘要:原题传送门 题意简析:你需要写一个数据结构,维护一个时间轴,支持如下操作: 1)插入1个新区间,删除所有时间轴上与它有交的区间并输出个数。 2)查询当前时间轴上的区间个数。 解题思路:裸的无旋treap即可。按照双端点排序,然后找前驱后继,进行操作即可。 AC代码:(目前是洛谷 Rank1 596m 阅读全文
posted @ 2017-05-09 15:25 Melacau 阅读(406) 评论(0) 推荐(0)
摘要:题意原题很清楚了。 解题思路:裸的平衡树操作,注意动态开点即可。 细节还是比较多的,具体参见代码吧。。。 阅读全文
posted @ 2017-05-08 17:20 Melacau 阅读(201) 评论(0) 推荐(0)
摘要:原题传送门 解题思路:裸平衡树操作,支持区间翻转即可,这里写了无旋treap。 其实平衡树的区间操作就和线段树差不多,你用个标记搞一下就好了,,,,, 阅读全文
posted @ 2017-05-08 13:24 Melacau 阅读(365) 评论(0) 推荐(0)
摘要:最近在研究平衡树,看起来这种东西又丧水又很深,感觉很难搞清楚。在Ditoly学长的建议下,我先学习了正常的treap,个人感觉这应该是平衡树当中比较好懂的而且比较好写的一种。 然而,发现带旋treap有很多无法支持的操作,例如各种区间操作,而且由于会旋转无法可持久化,这是一个十分影响实用性的问题,在 阅读全文
posted @ 2017-05-08 10:44 Melacau 阅读(1965) 评论(3) 推荐(1)
摘要:原题传送门 题意:给你N个带权点,一开始相互独立(每个点视为单独一个集合),有2种操作:1)合并2个集合;2)查询包含某元素集合内的权值第k小点编号。 解题思路:显然合并就是并查集,而查询则是平衡树实现。 考虑对每个集合开一棵平衡树,这样的话直接合并2棵平衡树的效率最坏是\( n \log n \) 阅读全文
posted @ 2017-05-04 09:44 Melacau 阅读(315) 评论(0) 推荐(0)
摘要:最近开始学习平衡树,在学长的强烈推荐下学习了AVL、红黑树、splay(以上我都还没学)treap。 首先讲一下个人对treap(树堆)的理解。 treap,顾名思义,就是tree+heap,首先因为treap是一棵平衡树,因此它满足二叉排序树的性质,接下来,为了防止BST退化成一条链,它使用了随机 阅读全文
posted @ 2017-05-03 09:08 Melacau 阅读(452) 评论(0) 推荐(0)
摘要:题目传送门 题目大意:给定一棵无根树,每个节点有自己的类别和权值,现在给定两个类别相同的点,叫你求这2点路径上同类别节点的权值和/最大权值。 节点类别与权值会改变。 解题思路:考虑对每一个类别开一棵线段树,动态开点,可以写指针,也可以开数组写链表,然后剩下的就是树剖的东西了。我写的是指针,跑的略慢一 阅读全文
posted @ 2017-04-30 17:41 Melacau 阅读(387) 评论(0) 推荐(0)