模板_Splay Tree
来源:互联网 发布:c语言题库及详解答案 编辑:程序博客网 时间:2024/06/05 20:15
#include<cstdio>#include<cstdlib>#include<iostream>using namespace std;struct Node{ Node* ch[2]; int r,v,s; Node(int v):v(v){ch[0]=ch[1]=NULL;r=rand();s=1;} bool operator < (const Node &a)const {return r<a.r;} int comp(int x){if(x==v) return -1;return x<v?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 insert(Node* &o,int x){ if(o==NULL) o=new Node(x); else{ int d=(x<o->v?0:1);insert(o->ch[d],x); if(o->ch[d]->r > o->r) rotate(o,d^1); } o->maintain();}void remove(Node* &o,int x){ int d=o->comp(x); if(d==-1){ Node *u=o; if(o->ch[0]!=NULL&&o->ch[1]!=NULL){ int d2=(o->ch[0]->r > o->ch[1]->r?1:0); rotate(o,d2);remove(o->ch[d2],x); }else{ if(o->ch[0]==NULL) o=o->ch[1];else o=o->ch[0]; delete u; } } else remove(o->ch[d],x); if(o!=NULL) o->maintain();}void splay(Node* &o,int k){//伸展 int d=o->comp(k); if(d==1) k-=o->ch[0]->s+1; if(d!=-1){ Node *p=o->ch[d]; int d2=p->comp(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){//分裂 前K小在left中其余在right中 splay(o,k);left=o;right=o->ch[1]; o->ch[1]=NULL;left->maintain(); }int main(){ return 0;}
1 0
- 模板_Splay Tree
- 模板_Splay Tree
- Size Balanced Tree模板
- K-d Tree 模板
- tree.py模板
- tree.py 模板
- Tree(MST模板题)
- Link-Cut-Tree模板
- 模板_KD-Tree
- 静态 Splay Tree 模板
- Tree(LCA模板)
- Splay tree讲解+模板
- 【lct模板】bzoj2631: tree
- 洛谷P2161 [SHOI2009]Booking 会场预约_Splay
- 洛谷P2234 [HNOI2002]营业额统计_Splay
- hdu2682 Tree(prim模板)
- Splay tree 区间翻转 模板
- POJ 3237 Tree(树链剖分模板)
- GraphicsMagick安装、实时生成缩略图
- PL/SQL编程学习之本地动态SQL
- json+hibernate死循环问题的解决方法
- SDL2源代码分析4:纹理(SDL_Texture)
- Phoenix+HBase使用心得
- 模板_Splay Tree
- class "org.apache.log4j.PropertyConfigurator"'s signer information does not match signer information
- jQuery.post( url, [data], [callback], [type] ) : 使用POST方式来进行异步请求
- Android_低功耗
- 多屏复杂动画CSS技巧三则
- Git 使用笔记
- hdu3966Aragorn's Story【树链剖分+树状数组】
- hdu1272 小希的迷宫(并查集)
- [GDOI2013][JZOJ3277]哈希和