平衡树
文章平均质量分 84
broxin
这个作者很懒,什么都没留下…
展开
-
NOI2005 维修数列(splay)
题意:写一个程序维护一个序列,支持6个操作:插入一段序列,删除一段子序列,区间统一修改为一个值,区间翻转,求区间和,求整个序列的最大非空子序列(其实求区间的最大非空子序列也可以)。序列中最多同时存在5*10^5个元素。 想法:看到区间翻转就知道是splay,但这题非常恶心,要维护大量的信息,懒标记控制不当也容易写错。 这题比较有价值的地方在于分治求区间最大和,需要像线段树的hotel一题一样维原创 2015-11-21 18:16:17 · 371 阅读 · 0 评论 -
[BZOJ2733][HNOI2012] 永无乡(splay)
题意:给出N个小岛,每个小岛有一个固定的优先级,最开始有M座桥连接其中的某些小岛。给出Q次操作,操作有两种:在两个小岛之间连一座桥,或者询问x所属的连通块内优先级第k的岛屿编号,不存在就输出-1。 这道题涉及以权值为关键字的splay的合并,开始想了一会,没想出可以很快合并的方法,然后看了别人的做法,叫做启发式合并(一开始吓哭了),但看了代码之后就无语了,就是手动把size更小的那个splay的原创 2015-11-22 22:05:56 · 747 阅读 · 0 评论 -
[BZOJ3295] [Cqoi2011]动态逆序对 (树套树)or(CDQ分治)
题意:N个数的排列,M次操作,每次求当前的逆序对数量并删掉一个数。 先说一下cdq分治做法。(5960kb,1.4s) 网上很多题解,我都看不懂(其实很多人的程序几乎是一样的,就改了一下变量名),然后就自己硬着头皮想了这道题,基本是独立做出来的,做出来之后竟然1A,简直愉快。不过我太辣鸡了想了半天才发现这本质上是一个三维偏序,分别是时间,下标,数值,记为(t,x,y)。 我们可以把删原创 2016-01-23 22:16:17 · 5022 阅读 · 7 评论 -
[hdu4453]looploop [treap/splay]
题意:给定一个循环序列,支持以下操作:区间增加,区间翻转,单点插入/删除,移动光标,询问光标所指的位置的值。 首先一眼看出可以用线性数据结构(平衡树)来维护。然后这些操作都很基础。但是要注意光标怎么处理。可以维护一个k记录它指向第几个,但是这样在区间操作时候可能区间分别位于这个序列的两端(因为你破环为链了)。比较好的方式是每次人工使得光标指向的元素位于序列的最左端。 这种题以前都是写的spla原创 2016-02-05 22:58:02 · 523 阅读 · 0 评论 -
[CQOI2015]任务查询系统 (可持久化treap)
题意:有n个任务。每个任务描述为(s,e,p)表示起始、结束时间、优先级。M次询问,查询i时刻优先级排前k的任务的优先级之和。如果k超过那个时刻运行任务的总量,输出那个时刻所以优先级之和。强制在线。 s,e 哎呀我去这么裸的主席树为什么去年省选只有一个人A了? 开始看做插入一个数,结束看做删除,询问就是问第i个版本中前k个之和。先把p离散化,然后扫描一遍用主席树来维护p值。好像没什么坑点原创 2016-02-05 23:20:17 · 1545 阅读 · 0 评论 -
BZOJ1858 序列操作 [treap,避免双标记的特殊技巧]
题意:给一个01序列,有5种操作: 0 L R 将[L,R]之间的数字都变成0; 1 L R 将[L,R]之间的数字都变成1; 2 L R 将[L R]之间的数字都取反; 3 L R 询问[L R]之间1的个数; 4 L R 询问[L,R]之间连续1的个数最大是多少. 第一眼:这sb题。。 第二眼:这sb题。。 第三眼:哎呀卧槽这儿取反和赋值俩标记咋搞??? 大致脑补了一下,原创 2016-02-11 21:39:43 · 468 阅读 · 0 评论 -
[Noi2016十连测第二场]幻想(后缀平衡树)
题意:给一个字符串,三种操作,末尾插入一个字符,弹出末尾的字符,查询区间内一个给定字符串出现了多少次。 卡常神题。。500万的数据规模什么鬼。。 假如没有区间限制,就是后缀平衡树的裸题。查询一个字符串s出现了多少次,就是在后缀平衡树上找出 由于替罪羊的删除不是很方便,这里可以用treap,删除一个节点的时候直接重构这个节点所在的子树。以前重构操作都是直接写在rotate里面的,用起来非常方便原创 2016-06-17 12:19:11 · 1526 阅读 · 0 评论