treap模版代码

treap模版暂存。

以后修改整理。


#include<cstdio>
#include<iostream>
#include <time.h>
#include<cstdlib>

using namespace std;
struct Node
{
Node *ch[2];//左右子树
int r;//优先级。数值越大,优先级越高
int v;//值
int cmp(int x)const
{
if(x==v) return -1;
return x<v?0:1;
}
};
/*
旋转操作:
1.取出新的根节点。左旋:取原根的右孩子;右旋:取原根的左孩子
2.左旋:原根的右孩子的左孩子取代之;右旋:原根的左孩子的右孩子取代之
3.左旋:原根成为新根的左孩子;右旋:原根成为新根的右孩子
4.将更新返回的根节点
旋转左右是根据原根结点的位置变化方向而定的
*/
void rotate(Node* &o,int d)//d=0代表左旋,d=1代表右旋
{
Node *k=o->ch[d^1];//左旋时d^1得到1右孩子,右旋时d^1得到0左孩子,取出该结点
o->ch[d^1]=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[0]=o->ch[1]=NULL;
o->v=x;
o->r=rand();
}
else
{
int d=o->cmp(x);
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;
}
Node *head;

int main()
{
int n;
scanf("%d",&n);
for(int i=1; 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)
{
case 0:
cout<<find(head,t)<<endl;
break;
case 1:
insert(head,t);
break;
case 2:
remove(head,t);
break;

}
}
return 0;
}

treap模版代码

时间: 2024-10-13 12:37:08

treap模版代码的相关文章

hibernate的dao模版代码

本提供来自:点击链接加入群[J2EE开发(SSH+IntelliJ IDEA)]:http://jq.qq.com/?_wv=1027&k=QtFTMx package com.mzq.dao; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.List; import java.util.regex.Ma

java 在线编辑模版 代码编辑器 兼容手机平板PC freemaker 静态引擎 网站源码

java 企业网站源码 前后台都有 静态模版引擎, 代码生成器大大提高开发效率 前台: 支持三套模版, 可以在后台切换 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以访问速度快,轻便,对服务器负担小 3.网站前端采用主流的响应式布局,同一页面同时支持PC.平板.手机(三合一)浏览器访问 4.springmvc +spring4.2.5+ mybaits3.3  SSM 普通java we

java 网站源码 在线编辑模版 代码编辑器 兼容手机平板PC freemaker 静态引擎

前台: 支持四套模版, 可以在后台切换 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以访问速度快,轻便,对服务器负担小 3.网站前端采用主流的响应式布局,同一页面同时支持PC.平板.手机(三合一)浏览器访问 4.springmvc +spring4.3.7+ mybaits3.3  SSM 普通java web(非maven, 赠送pom.xml)  数据库:mysql --------

[技巧篇]01.Servlet的优化模版代码

Servlet.java的模版 #---------------------------------------------# # <aw:description>Template for Servlet</aw:description> # <aw:version>1.1</aw:version> # <aw:date>04/05/2003</aw:date> # <aw:author>Ferret Renaud<

treap 模版

struct Treap { struct node { node *son[2]; int key,siz,wei,cnt; node(int _key,node *f) { son[0]=son[1]=f; key=_key;siz=cnt=1;wei=rand(); } void pushup() { siz=son[0]->siz+son[1]->siz+cnt; } }*null,*root; Treap() { null=new node(0,0); null->siz=nu

Android读取选择联系人的模版代码实现

1.创建SelectContactActivity类,在AndroidManifest.xml添加类 import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.content.ContentResolver; import android.content.Intent;

Android开发模版代码(4)——状态栏设置

下面的代码是基于开源项目SystemBarTint,我们需要添加其依赖 compile 'com.readystatesoftware.systembartint:systembartint:1.0.3' 设置状态栏白色 1. 设置主题theme 在AndroidManifest文件中,设置theme 按住Ctrl,点开那个theme,修改theme 2. 设置xml文件 之后在xml文件中的根节点,添加属性android:fitsSystemWindows="true",同时,把背景

treap模版

#include <cstdio> #include <cstring> #include <cstdlib> using namespace std; struct Node { Node *ch[2]; int r; int v; int s; Node(int v): v(v) { ch[0] = ch[1] = NULL; r = rand(); s = 1; } bool operator < (const Node& rhs) const{ r

VS Code安装yo(Yeoman) 插件下载.net core 模版代码开发

在安装插件以前,请看插件地址的相关依赖 Pre-requirements [Node.js] (https://nodejs.org) [npm] (https://www.npmjs.com) [Yeoman] (http://yeoman.io) A Yeoman generator of choice 主要过程: 1.VS Code 安装yo 插件 ext install yo vs code yo插件地址: https://marketplace.visualstudio.com/ite