摘要:
这个题和维修数列一比就简单了许多,只要把所谓的光标处理好就OK 了,就是字符串处理的时候比较麻烦,需要多调试一下。这个题不用回收空间了,不过插入的时候还是要递归建树再插入,这样可以防止树的深度过大导致不平衡使得splay效率变差。editor 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 #include<cstring> 6 #define maxn 2400000 7 #define inf 2147483646 阅读全文
摘要:
Splay的BOSS级别的题目,几乎包含了所有区间维护的操作,对于想要提高代码熟练度的人来说这个题非常值得一写。首先我们要维护的域是:size,sum,la(左max),ra(右max),ma(整体max)更新的时候用这些域更新就行,注意下传的时候也要更新响应域值。对于那些恶心操作,我就挨个说一下吧:注:标准结构:区间右端点+1(R)为根,区间左端点-1(L)为根的左儿子,这样目标区间就是L的右儿子,这种形式以后都用"标准结构"代替。插入操作:先把需要插入的序列建成一个小平衡树(递归),转出标准结构,插到L的右儿子上就行了。删除操作:转出标准结构,把L的右儿子切下来就行了( 阅读全文
摘要:
这个题也是单点维护,不管来的是人还是狗,只要num=0就插入,否则就删除,想清楚了就很好写。Pets 1 const 2 maxn=100000; 3 ms=1000000; 4 var 5 c:array[0..maxn,0..1]of longint; 6 size,fa,key:array[0..maxn]of longint; 7 i,n,a,b,tot,sum,num,now,ans,tmp,rot:longint; 8 procedure update(x:longint); 9 begin 10 size[x]:=... 阅读全文
摘要:
Splay练手题,真正做起来不那么简单,虽然是简单的单点维护,但是删除的时候会比较恶心(吐槽一下,我就是因为一上来用这个题splay练手,调了半天没调出来,气死我了)。友情提示:刚进公司就被开的不算在最后的答案里(这公司真冷酷......)Teller 1 const 2 maxn=300000; 3 var 4 c:array[0..maxn,0..1]of longint; 5 fa,size,key:array[0..maxn]of longint; 6 n,i,a,limit,now,num,tot,sum,rot,tmp:longint; 7 sign:char; 8... 阅读全文