fhq treap 封装

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ls (l[cnt])
#define rs (r[cnt])
const int N = 100005;

struct Ftree
{
    int l[N], r[N], val[N], rad[N], siz[N], ecnt, rt;
    int New(int k)
    {
        val[++ecnt] = k;
        rad[ecnt] = rand();
        siz[ecnt] = 1;
        return ecnt;
    }
    void update(int cnt)
    {
        siz[cnt] = siz[ls] + siz[rs] + 1;
    }
    void split(int cnt, int k, int &x, int &y)
    {
        if(cnt == 0)
        {
            x = y = 0;
            return ;
        }
        if(val[cnt] <= k)
        {
            x = cnt;
            split(rs, k, rs, y);
        }
        if(val[cnt] > k)
        {
            y = cnt;
            split(ls, k, x, ls);
        }
        update(cnt);
    } 
    int merge(int x, int y)
    {
        if(x == 0) return y;
        if(y == 0) return x;
        if(rad[x] <= rad[y])
        {
            r[x] = merge(r[x], y);
            update(x);
            return x;
        }
        if(rad[x] > rad[y])
        {
            l[y] = merge(x, l[y]);
            update(y);
            return y;
        }
    }
    int kth(int cnt, int k)
    {
        if(siz[ls] + 1 == k) return val[cnt];
        if(siz[ls] >= k) return kth(ls, k);
        else return kth(rs, k - siz[ls] - 1);
    }
    void add(int k)
    {
        int x, y;
        split(rt, k, x, y);
        rt = merge(merge(x, New(k)), y);
    }
    void del(int k)
    {
        int x, y, z;
        split(rt, k, x, y);
        split(x, k - 1, x, z);
        z = merge(l[z], r[z]);
        rt = merge(merge(x, z), y);
    }
    int suc(int k)
    {
        int x, y, ans; 
        split(rt, k, x, y);
        ans = kth(y, 1);
        rt = merge(x, y);
        return ans;
    }
    int pre(int k)
    {
        int x, y, ans;
        split(rt, k - 1, x, y);
        ans = kth(x, siz[x]);
        rt = merge(x, y);
        return ans;
    }   
}ft;
int main()
{

}

原文链接: https://www.cnblogs.com/lcezych/p/13236342.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    fhq treap 封装

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/362335

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 下午2:19
下一篇 2023年3月2日 下午2:19

相关推荐