Treap树
来源:互联网 发布:剑三商城捏脸数据导入 编辑:程序博客网 时间:2024/05/23 00:02
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct Node{ Node *ch[2]; int v,r,s; int cmp(int x) const { 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)//旋转,d=0左旋,d=1右旋{ 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();o->ch[0]=o->ch[1]=NULL;o->v=x;o->r=rand();} else{ int d=o->cmp(x); if(d!=-1) {insert(o->ch[d],x);if(o->ch[d]->r>o->r) rotate(o,d^1);} }}void remove(Node* &o,int x){ int d=o->cmp(x); if(d==-1) { if(o->ch[0]==NULL) o=o->ch[1]; else if(o->ch[1]==NULL) o=o->ch[0]; else{ int d2=(o->ch[0]->r>o->ch[1]->r)?1:0; rotate(o,d2);remove(o->ch[d2],x); } } else remove(o->ch[d],x);}bool find(Node *o,int x){ while(o!=NULL) { int d=o->cmp(x); if(d==-1) return true; else o=o->ch[d]; } return false;}
0 0
- Treap树
- Treap树
- Treap树
- Treap 树
- Treap树
- treap树
- Treap树
- Treap树
- Treap树
- 【线段树,Treap】BZOJ2770 YY的Treap
- 树:Treap树
- Treap 堆树
- Treap树(代码)
- treap(树堆)
- treap(树堆)
- Treap(树堆)
- Treap(树堆)
- treap树模版
- 当微软把VR头盔普及成第二台显示器时
- 关于Java内存溢出问题
- Move语义
- AppWidget(桌面小控件详解)
- MultiDex使用方法及由此导致的crash、ANR问题解决方案
- Treap树
- MFC响应鼠标滚动的问题
- libcurl库(C++)快速使用
- SpringMVC如何实现IOC和AOP
- Servlet
- zepto常用方法
- Android6.0 动态权限申请步骤以及需要注意的一些坑
- 贪心法和动态规划
- 时间序列完全教程(R)