新技能:splay支持区间翻转,区间插入,区间删除
来源:互联网 发布:肇庆 骏域网络 编辑:程序博客网 时间:2024/05/29 14:35
splay加两个哨兵左一个,右一个。这样便于提取区间。
建树时就一直放在前一个节点的右儿子即可,然后找一个中间的点splay到根
find操作支持找到区间当前第x位
提取区间:把l-1位上splay到根,第r+1位splay到root的右子树,然后[l,r]就在r+1位的左子树上。
然后具体的:
对于区间翻转:
find当前区间那个点时一路pushdown懒标记,懒标记的思想和线段树的那个类似,十分灵活,你的该区间内的点,左边到了右边,右边到了左边,现在只要左右两边都换顺序这就是一种分治思想。懒标记直接打在r+1位的左子树上。
int find(int no,int x) { S[0]=0; pushdown(no); if(S[ch[no][0]]+1==x) return no; if(S[ch[no][0]]>=x) return find(ch[no][0],x); return find(ch[no][1],x-S[ch[no][0]]-1); } void ond() { scanf("%d%d",&l,&r); if(l==r) return; int fl=find(root,l); int fr=find(root,r+2); splay(fl,0); splay(fr,root); lazy[ch[fr][0]]^=1; }
对于区间删除,直接提取后删除,插入就直接提取头指针,中间加一段,然后把原来的拼在后面。
阅读全文
0 0
- 新技能:splay支持区间翻转,区间插入,区间删除
- 【数据结构SPLAY】splay区间翻转,区间和查询,区间插入,区间删除,区间修改
- splay区间翻转及删除区间,平移区间
- UVA 11996 Splay + LCP + Hash + 区间翻转 插入 删除
- hdu 3487 Play with Chain splay 区间翻转,插入,删除
- POJ 题目3580 SuperMemo(Splay Tree区间加,区间翻转,区间右移,插入删除,区间最小值)
- hdu 3487 区间 翻转 切割 插入 splay
- Splay区间翻转
- 区间翻转问题 Splay
- HDU3487(splay区间翻转+区间切割)
- hdu 1890 Splay区间最小值、区间翻转
- hdu 1890 splay区间翻转
- Splay tree 区间翻转 模板
- HDU 1890 splay区间翻转
- HDU 1890 Splay区间翻转
- hdu 1890 splay 区间翻转
- 【codevs 3303】翻转区间 splay
- BZOJ 3223 Splay区间翻转
- STL之正则表达式
- 使用VS创建第一个窗口程序
- Servlet
- typedef用法小结
- jsp不能将数据完整的显示出来
- 新技能:splay支持区间翻转,区间插入,区间删除
- n皇后问题
- flex
- 优普丰(CSM认证)2天的Certified Scrum Master培训学习笔记
- 经过编辑的行数据不能回传到controller
- 20170707
- ssm框架与三层架构
- SSH整合
- 1326: 平面切割(特别版)