Splay
文章平均质量分 73
Rainbow6174
这个作者很懒,什么都没留下…
展开
-
NOI2005 BZOJ1500 维修队列 题解&代码
题意: 维护一个数列,要求支持六种操作: 1、INSERT posi tot c1 c2 c3 c4… 在队列的第posi位按序插入tot个数字,分别为c1 c2 c3 c4… 2、DELETE posi tot 从队列的第posi位起删除tot个数字,数据保证一定可以删除tot个 3、MAKE-SAME posi tot c 从队列的第posi位起将tot个数字的值改为c,数据保证一定可以原创 2015-12-28 13:30:15 · 1245 阅读 · 1 评论 -
BZOJ1503 NOI2004 郁闷的出纳员 题解&代码
题意太傻不多解释= =就是维护一个档案队列,按节点val建树思路: 从query操作(命令F)可以看出,这棵树的顺序核心在于value而不是一般的维护队列,这样的话相同value的节点显而易见地应该放在一起,我们除了s[]记录子树大小之外,额外增加一个z[]记录节点大小(对于x节点来说每有一个与其value重复的z[x]++),注意z[]不需要维护。 然后就是喜闻乐见的标记了,这道题算是比较良心原创 2015-12-29 18:11:13 · 1538 阅读 · 0 评论 -
BZOJ3224 CODEVS4543 普通平衡树 题解&代码
醉啦醉啦= =第k大第k小纠结了好久,最后瞎蒙了一个蒙错了然后纠结了好久,后来学长告诉我【你们排名难道是成绩低的排前面么】题意: 维护一个序列,按照val[]排序,支持: 1. 插入x 2. 删除x(若有多个相同的val,因只删除一个) 3. 查询x是第几大(若有多个相同的数,因输出最小的排名) 4. 查询第k大 5. 求x的前驱(前驱定义为小于x,且最大的数,可能树中不存在x) 6.原创 2015-12-30 20:42:27 · 931 阅读 · 0 评论 -
Splay模板 初步修改完成
不算很慢= =也谈不上快 反正我觉得挺好记的…#include<iostream>#include<stdio.h>#include<string.h>#define INF 0x3f3f3f3fusing namespace std;const int maxn=500005;int n,m,r,c,pos,tot,temp;int val[maxn],fa[maxn],ch[ma原创 2016-01-05 21:06:14 · 796 阅读 · 0 评论 -
BZOJ 1208 [HNOI2004] 宠物收养所 题解&代码
其实是一道简单的Splay题目【虽然我写了很久 据说【本来就是】用set+二分很容易就过啦,的确一个不需要maintain和pushdown的Splay和咸鱼没什么区别,不过第一次写Splay我觉得自己写得好丑啊= =【还调了一个多小时题意: 给出宠物和人出现的序列,宠物和人都会选择 ①现在存在的 ②和自己特征值之差的绝对值最小的 ③特征值最小的 非同类【即宠物选择人,人选择宠物】,选择原创 2015-12-25 13:39:28 · 967 阅读 · 0 评论 -
BZOJ1251 序列终结者 题解&代码
题意:给出一个初始均为0的序列,两个操作分别是 1、1 l r v区间[l,r]的值增加v 2、2 l r翻转区间[l,r]的值 3、3 l r求区间[l,r]的最大值 题解: 普通的Splay,标记有翻转标记和增加标记,注意标记和下传时间同步 维护val和mx即可 嗯…加两个虚节点作为首尾就可以了【刚才忘了说】大家都是用单旋Splay复习的…都是随手写大量标记Splay练手的QAQ只原创 2016-07-19 23:30:14 · 1661 阅读 · 0 评论