[Loj.ac-java] Splay - 伸展树(分裂树)

本文介绍了如何使用Java实现伸展树(Splay Tree),包括问题背景、代码实现以及Splay Tree的基本概念和操作。文章通过具体的代码示例展示了左旋、右旋、单双旋的操作,并讨论了伸展树相对于其他数据结构的效率优势。
摘要由CSDN通过智能技术生成

问题:

说明:

https://oi-wiki.org/ds/splay/

来 写 一 个 Splay。

问题链接:https://loj.ac/problem/104

提交记录:

https://loj.ac/submission/884459

输入案例:

传了一份测试数据:https://download.csdn.net/download/qq_28033719/12709334 (假装)


我的代码:

准备知识

1、以往知识:

左旋转 右旋转 前驱 后继 https://blog.csdn.net/qq_28033719/article/details/107316144

2、Splay

其实每次都进行 splay,无论增删查改。

百度百科的图解看不明白!伸展树意思是节点伸展到 root 的树()听说基本结构和红黑没什么不同,效率还比treap,avl树要高

3、单双旋

单旋:子节点和父节点旋转

双旋:父节点和祖父节点(父节点的父节点)旋转,子节点和父节点旋转,两次旋转

听说可以压,,行?

4、具体代码

我还是不习惯用数组,面向对象多好啊(,而且调试起来也容易明白,所以还是撸了个对象弄得,当然,测试时间在 超时 上下游动,看服务器脾气了。我也没见测试时间比 Treap 少啊

import java.util.Scanner;

public class Spley_OI {

    class Node {
        int val;
        int num;
        int size;
        Node father;
        Node left;
        Node right;
        public Node(int val) {
            this.val = val;
        }
    }

    Node root;

    public void pushup(Node r) {
        if (r !&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值