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;

        }
    }
    ;
}

最新文章

  1. javascript面向对象(1)
  2. Android笔记——活动的生命周期
  3. Dynamic CRM 2013学习笔记(四十一)流程4 - 异步工作流(Workflow)用法图解
  4. UIView与CALayer的区别
  5. c++ Windows Socket实现最简单的C/S网络通信(TCP)
  6. 7.HBase In Action 第一章-HBase简介(1.2.1 典型的网络搜索问题:Bigtable的起原)
  7. 『Asp.Net 组件』Asp.Net 服务器组件 内嵌JS:让自己的控件动起来
  8. How Tomcat Works(八)
  9. 如何用.NET创建Windows服务
  10. PMBOK 项目管理 九大知识领域和五大流程 PMI
  11. 杭电1010(dfs + 奇偶剪枝)
  12. 利用虚函数减少导出DLL的头文件依赖
  13. 使用 nvm 来管理nodejs版本 。
  14. JAVA2015086第十一周作业
  15. C#高级编程笔记之第三章:对象和类型
  16. [编译] 5、在Linux下搭建安卓APP的开发烧写环境(makefile版)—— 在Linux上用命令行+VIM开发安卓APP
  17. 分布式监控系统开发【day38】:报警策略队列处理(五)
  18. c#中数组的总结
  19. 【C#】C#格式化文件大小
  20. Silverlight中使用MVVM(4)—演练

热门文章

  1. 获取AVCaptureSession samplebuffer 一像素的 rgb值
  2. 解决PhoneGap不支持viewport的几种方法
  3. linux笔记:linux常用命令-权限管理命令
  4. Scrum项目3.0
  5. GIS软件列表
  6. NSNotification系统通知优化
  7. 第四周 技术随笔psp
  8. Eclipse上安装GIT插件EGit
  9. 172. Factorial Trailing Zeroes -- 求n的阶乘末尾有几个0
  10. Android开发--Activity的创建