zoukankan      html  css  js  c++  java
  • treap平衡树

    今天集训讲平衡树,就瞎搞了一下。直接下代码。

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<ctime> 
    #include<cstdlib>
    using namespace std;
    int cnt; //现在的点总数
    int lc[100010],rc[100010];
    //左右儿子
    int sz[100010]; //子树大小
    int V[100010]; //当前点的权值 
    int R[100010];//为随机的值,为了保证堆的性质 
    void update(int cur) //子树大小 
    {
        sz[cur] = sz[lc[cur]] + sz[rc[cur]] + 1;
    }
    void right_rotate(int &q)
    {
        int p = lc[q];
        lc[q] = rc[p];
        rc[p] = q;
        update(q);
        update(p);
        q = p;
    }
    void left_rotate(int &q)
    {
        int p = rc[q];
        rc[q] = lc[p];
        lc[p] = q;
        update(q);
        update(p);
        q = p;
    }
    void insert(int &cur,int v) //cur为当前节点,v为插入的值 
    {
        if(!cur)
        {
            cur = ++ cnt;
            V[cnt] = v;
            R[cnt] = rand();
            return;
        }
        if(v < V[cur])
        {
            insert(lc[cur],v);
            update(cur);
            if(R[lc[cur]] < R[cur])
            {
                right_rotate(cur);
            }
        }
        else
        {
            insert(rc[cur],v);
            update(cur);
            if(R[rc[cur]] < R[cur])
            {
                left_rotate(cur);
            }
        }
    }
    void del(int &cur,int v)
    {
        if(!cur)
        return;
        if(V[cur] == v)
        {
            if(lc[cur] && rc[cur])
            {
                left_rotate(cur);
                del(lc[cur],v);
            }
            else
            {
                cur = lc[cur] | rc[cur];
                update(cur);
                return;
            }
        }
        else if(V[cur] > v)
        {
            del(lc[cur],v);
        }
        else
        del(rc[cur],v);
        update(cur);
    }
    int main()
    {
        return 0; 
    }
  • 相关阅读:
    收藏随笔
    Jquery根据元素ID判断该元素是否存在
    DIV+CSS布局中IE与FF浏览器之间重要的兼容性差异
    css3 boxsizing属性
    常见CSS属性及值
    Pycharm学习记录注释
    python之reload用法
    python之sorted用法
    android studio目录结构浅析
    纪念开通博客
  • 原文地址:https://www.cnblogs.com/DukeLv/p/9324444.html
Copyright © 2011-2022 走看看