
splay
silentsaber~
晨意微寒秋渐深,侧畔无事俏佳人
展开
-
小练习,splay区间反转
一道codevs的区间翻转问题。http://codevs.cn/problem/1743/题意,每次找最左边的数,令为k: k=1,结束; 否则,ans++,翻转[1,k].(给定的是全排列,所以,加两个点就可以直接做了。)题目中说可能无解,但我觉得应该有解,所以就没管-1. 求大神指导一下到底是否一定有解。(当然最好定义一个较大的操作数,大于此操作数仍无法原创 2015-12-11 09:40:21 · 1387 阅读 · 0 评论 -
感人至深,splay的代码量
A Simple Problem with Integers线段树大法好 splay码量太长了。但是为了早日掌握splay,还是作死的写了一下http://poj.org/problem?id=3468就是线段树区间操作,lazy标记。只不过用splay实现。写完之后发现,以前认为线段树代码量长,现在~~~~~~~--------------------------原创 2015-12-11 09:57:00 · 564 阅读 · 0 评论 -
splay的入门
splay玄学,神奇,多变,应用广。均摊时间复杂度O(n log n) (不会证明,好像都是这么说“可以证明”的,单次最坏情况是O(n),但是平均下来是n log n).思路很简单,基于rotate操作,和splay把某个点旋到那个节点之下。几乎所有的操作都需要splay.花了好长时间研究怎么写更简便,之后总结出了属于自己的参考模板。(功能不全,基于bzoj1588的)原创 2015-12-04 15:00:05 · 879 阅读 · 0 评论 -
splay区间翻转及删除区间,平移区间
研究了很长时间,花费了一个下午debug,终于调出来了hdu 3487 play with chainhttp://acm.hdu.edu.cn/showproblem.php?pid=3487两个操作(指针实现)cut l,r, c把[l,r]剪下来放到剩下序列中第c个后面的位置.flip l r 把[l,r]翻转(lazy标记,每次交换左右节点)原创 2015-12-06 17:27:04 · 3418 阅读 · 0 评论 -
方伯伯的oj bzoj3594
http://www.lydsy.com/JudgeOnline/problem.php?id=3594(貌似比维护数列更恶心QAQ,虽然我只是看了一眼不想写)这道题真够恶心,它坑了我一上午~~还是下午来的时候调出来的。原创 2016-03-30 16:58:59 · 514 阅读 · 0 评论 -
bzoj1503 splay
运用一个整体变量处理全局修改,在减工资的时候处理删除。反正我是不会的,理解了别人的代码(改成了指针):int del(node *&u,node *f){ if(u==null)return 0; int k;//删除人数 if(u->key+lazy<m) { k=del(u->ch[1],u)+u->ch[0]->sz+1; u->ch[1]->sz=u->sz-k原创 2016-03-24 11:15:06 · 348 阅读 · 0 评论 -
HDU3436[离散化splay]
一开始拿到题,恩,还行吧,就是splay模拟一下。看了一下数据,卧槽,n这么大,不过好在q比较小,所以需要离散化。线段树的离散化是把数字排序去重,每个数字对应在数组中的位置。splay的离散化要是这么写估计得挂。 splay的离散化:将要操作的点加到数组中排序、去重,按顺序,每个点加入,并且相连两个点之间的区间算作一个点加入。也就是,spla原创 2016-02-29 17:23:10 · 338 阅读 · 0 评论 -
POJ3580[memo] 旋转吧,splay!
重新写了一下splay,并且琢磨自己的版。以前看过这道题,感觉操作好繁琐,不做。今天看了一下,恩,有必要再写一下splay,先拿这道题练手。题意:给定序列,维护6个操作:ADD l r x 把[l,r]加上xREVERSE l r 把[l,r]翻转REVOLVE l r t 把[l,r]这一段向后滚动t次, 比如1,2,3 滚动2次变成 2,3,1原创 2016-03-01 09:55:27 · 373 阅读 · 0 评论