splay树
来源:互联网 发布:基于java电商系统源码 编辑:程序博客网 时间:2024/05/21 22:27
#include<cstdlib>struct Node{ Node* ch[2]; int s,v,r; Node(int v): v(v) {ch[0]=ch[1]=NULL;r=rand();s=1;} int cmp(int x) const { if(x==s-ch[1]->s) return -1; return x<=ch[0]->s?0:1; } void maintain(){ s=1; if(ch[0]!=NULL) s+=ch[0]->s; if(ch[1]!=NULL) s+=ch[1]->s; }};void rotate(Node* &o,int d){ Node* k=o->ch[d^1];o->ch[d^1]=k->ch[d];k->ch[d]=o; o->maintain();k->maintain();o=k;}void splay(Node* &o,int k){ int d=o->cmp(k); if(d==1) k-=o->ch[0]->s+1; if(d!=-1) { Node* p=o->ch[d]; int d2=p->cmp(k); int k2=(d2==0?k:k-p->ch[0]->s-1); if(d2!=-1) { splay(p->ch[d2],k2); if(d==d2) rotate(o,d^1);else rotate(o->ch[d],d); } rotate(o,d^1); }}Node* merge(Node* left,Node* right){ splay(left,left->s); left->ch[1]=right; left->maintain(); return left;}void split(Node* o,int k,Node* &left,Node* &right){ splay(o,k); left=o; right=o->ch[1]; o->ch[1]=NULL; left->maintain();}
0 0
- SPLAY树
- Splay树
- splay树
- splay树
- Splay 树
- splay树
- Splay树
- SPLAY树
- 【splay】splay小结 文艺平衡树
- 伸展树(splay树)
- Splay树(伸展树)
- Splay Tree(伸展树)
- Splay树简介
- Splay Tree 伸展树
- Splay伸展树&模板
- 【splay树】hdu 3487
- Splay 伸展树
- 伸展树splay tree
- 隐马尔可夫模型(HMM)
- 面向对象特性,包括继承、封装、多态、抽象、访问控制
- 二叉树的前/中/后序遍历原理与思路 陈越
- Android 动画
- c语言同时显示圆和y=x*x
- splay树
- Elasticsearch索引和mapping及logstash配置文件过滤(教程2)
- class.forname()的使用
- 字符串类 Mystring 中的四种基本函数
- Codeblocks start debugger...........failed的问题
- OpenCV Tutorial: 繪圖(line、rectangle、circle、ellipse、polylines、putText)
- Altium Designer(Protel)网络连接方式Port和Net Label详解
- 【JVM】JVM之类加载器
- AFNetworking 3.0 版本使用