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; 
    }
  • 相关阅读:
    WPF之长短
    MFC程序和Win32程序的关系
    .NET Framework/CLR之长短
    常用软件
    经典推荐.Net面试法宝
    socket编程原理
    常用开发工具
    Get和Post方法的区别
    MAC IP等相关
    Datagrid为什么不自动换行显
  • 原文地址:https://www.cnblogs.com/DukeLv/p/9324444.html
Copyright © 2011-2022 走看看