treap模版代码
treap模版暂存。
以后修改整理。
#include<cstdio>
#include<iostream>
#include <time.h>
#include<cstdlib>
using namespace std;
struct Node
{
Node *ch[];//左右子树
int r;//优先级。数值越大,优先级越高
int v;//值
int cmp(int x)const
{
;
:;
}
};
/*
旋转操作:
1.取出新的根节点。左旋:取原根的右孩子;右旋:取原根的左孩子
2.左旋:原根的右孩子的左孩子取代之;右旋:原根的左孩子的右孩子取代之
3.左旋:原根成为新根的左孩子;右旋:原根成为新根的右孩子
4.将更新返回的根节点
旋转左右是根据原根结点的位置变化方向而定的
*/
void rotate(Node* &o,int d)//d=0代表左旋,d=1代表右旋
{
Node *k=o->ch[d^];//左旋时d^1得到1右孩子,右旋时d^1得到0左孩子,取出该结点
o->ch[d^]=k->ch[d]; //孩子的左(右)孩子取代孩子位置
k->ch[d]=o;//原根结点成为右(左)结点的左(右)孩子
o=k;//孩子结点取代原根节点位置,保证返回值是新的根结点
}
void insert(Node* &o,int x)//在以o为根的子树中插入键值x,修改o
{
if(o==NULL)
{
o=new Node();
o->ch[]=o->ch[]=NULL;
o->v=x;
o->r=rand();
}
else
{
int d=o->cmp(x);
insert(o->ch[d],x);
);
}
}
void remove(Node* &o,int x)
{
int d=o->cmp(x);
)
{
]==NULL) o=o->ch[];
]==NULL) o=o->ch[];
else
{
]->r > o->ch[]->r)?:;
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);
) return true;
else o=o->ch[d];
}
return false;
}
Node *head;
int main()
{
int n;
scanf("%d",&n);
; i<=n; ++i)
{
int t;
scanf("%d",&t);
insert(head,t);
}
int p;
cout<<"===="<<endl;
while(scanf("%d",&p)!=EOF)
{
int t;
scanf("%d",&t);
switch(p)
{
:
cout<<find(head,t)<<endl;
break;
:
insert(head,t);
break;
:
remove(head,t);
break;
}
}
;
}
treap模版代码的更多相关文章
- hadoop概述测试题和基础模版代码
hadoop概述测试题和基础模版代码 1.Hadoop的创始人是DougCutting?() A.正确 B.错误答对了!正确答案:A解析:参考课程里的文档,这个就不解释了2.下列有关Hadoop的说法 ...
- PowerDesigner 生成C#实体模版代码
操作步骤见: https://blog.csdn.net/da454122373/article/details/54346217 最后的template 模版代码如下: .if (%isValid ...
- Lodop的JS模版代码、文档式模版 生成加载赋值博文索引
Lodop获取全部JS代码,传统JS模版的生成.LODOP设置打印设计返回JS代码是变量 LodopJS代码模版的加载和赋值 Lodop生成文档式模版 LodopJS文档式模版的加载和赋值 由于加载J ...
- 快速入门Treap(代码实现)
学习数据结构对我来说真的相当困难,网上讲\(Treap\)的我也看不太懂,前前后后花了大概六天才把\(Treap\)学会.为了避免再次忘记,这里我整理一下\(Treap\)的基础知识和模板. 阅读此文 ...
- java 网站源码 在线编辑模版 代码编辑器 兼容手机平板PC freemaker 静态引擎
前台: 支持四套模版, 可以在后台切换 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以 ...
- treap 模版
struct Treap { struct node { node *son[]; int key,siz,wei,cnt; node(int _key,node *f) { son[]=son[]= ...
- [技巧篇]01.Servlet的优化模版代码
Servlet.java的模版 #---------------------------------------------# # <aw:description>Template for ...
- Android开发模版代码(4)——状态栏设置
下面的代码是基于开源项目SystemBarTint,我们需要添加其依赖 compile 'com.readystatesoftware.systembartint:systembartint:1.0. ...
- VS Code安装yo(Yeoman) 插件下载.net core 模版代码开发
在安装插件以前,请看插件地址的相关依赖 Pre-requirements [Node.js] (https://nodejs.org) [npm] (https://www.npmjs.com) [Y ...
随机推荐
- js 返回上一页和刷新
1. Javascript 返回上一页history.go(-1), 返回两个页面: history.go(-2); 2. history.back(). 3. window.history.forw ...
- Django开发博客- 部署
安装Git Git是一个被大量程序员使用的”版本控制系统”.此软件可以跟踪任何时间文件的改变,这样你以后可以随时召回某个特定版本. windows系统下面可以下载git-scm安装.除了第5步”Adj ...
- [Java] Java中List 去掉重复的值,并保持原先List顺序
private List<YourBean> removeDuplicate(List<YourBean> list) { Set<YourBean> set = ...
- 如何在Objective-C中实现链式语法
在接触到开源项目 Masonry 后,里面的布局约束的链式写法让我颇感兴趣,就像下面这样: 1 2 3 4 5 6 7 8 UIEdgeInsets padding = UIEdgeInsetsMak ...
- android之merge布局
<merge />标签闪亮登场了.当LayoutInflater遇到这个标签时,它会跳过它,并将<merge />内的元素添加到<merge />的父元素里. 用& ...
- SO修改
FUNCTION Z_SD_SALESORDER_CHANGE1. *"----------------------------------------------------------- ...
- 小心buffer的拼接问题 --转
最近遇见一个从前没有遇见的陷阱,就是data里的chunk拼接. 由于本人身为前端工程师,对buffer的概念实在是认识不足.这次的场景是我要通过http.get去抓取远端的网页文件,很不小心的是对方 ...
- 使用 HTML5 canvas 绘制精美的图形
HTML5 是一个新兴标准,它正在以越来越快的速度替代久经考验的 HTML4.HTML5 是一个 W3C “工作草案” — 意味着它仍然处于开发阶段 — 它包含丰富的元素和属性,它们都支持现行的 HT ...
- Div CSS absolute与relative的区别小结
absolute:绝对定位,CSS 写法“ position: absolute; ”,它的定位分两种情况,如下: 1. 没有设定 Top.Right.Bottom.Left 的情况,默认依据父级的“ ...
- [Hadoop入门] - 1 Ubuntu系统 Hadoop介绍 MapReduce编程思想
Ubuntu系统 (我用到版本号是140.4) ubuntu系统是一个以桌面应用为主的Linux操作系统,Ubuntu基于Debian发行版和GNOME桌面环境.Ubuntu的目标在于为一般用户提供一 ...