问题:
说明:
来 写 一 个 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 !&