"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.splay2 = void 0;
const splay2 = (root, node) => {
    const p = node.p2;
    if (!p)
        return root;
    const pp = p.p2;
    const l2 = p.l2 === node;
    if (!pp) {
        if (l2)
            rSplay2(node, p);
        else
            lSplay2(node, p);
        return node;
    }
    const l1 = pp.l2 === p;
    if (l1) {
        if (l2) {
            root = llSplay2(root, node, p, pp);
        }
        else {
            root = lrSplay2(root, node, p, pp);
        }
    }
    else {
        if (l2) {
            root = rlSplay2(root, node, p, pp);
        }
        else {
            root = rrSplay2(root, node, p, pp);
        }
    }
    return (0, exports.splay2)(root, node);
};
exports.splay2 = splay2;
const rSplay2 = (c2, c1) => {
    const b = c2.r2;
    c2.p2 = undefined;
    c2.r2 = c1;
    c1.p2 = c2;
    c1.l2 = b;
    if (b)
        b.p2 = c1;
};
const lSplay2 = (c2, c1) => {
    const b = c2.l2;
    c2.p2 = undefined;
    c2.l2 = c1;
    c1.p2 = c2;
    c1.r2 = b;
    if (b)
        b.p2 = c1;
};
const rrSplay2 = (root, c3, c2, c1) => {
    const b = c2.l2;
    const c = c3.l2;
    const p = c1.p2;
    c3.p2 = p;
    c3.l2 = c2;
    c2.p2 = c3;
    c2.l2 = c1;
    c2.r2 = c;
    c1.p2 = c2;
    c1.r2 = b;
    if (b)
        b.p2 = c1;
    if (c)
        c.p2 = c2;
    if (!p)
        root = c3;
    else if (p.l2 === c1)
        p.l2 = c3;
    else
        p.r2 = c3;
    return root;
};
const llSplay2 = (root, c3, c2, c1) => {
    const b = c2.r2;
    const c = c3.r2;
    const p = c1.p2;
    c3.p2 = p;
    c3.r2 = c2;
    c2.p2 = c3;
    c2.l2 = c;
    c2.r2 = c1;
    c1.p2 = c2;
    c1.l2 = b;
    if (b)
        b.p2 = c1;
    if (c)
        c.p2 = c2;
    if (!p)
        root = c3;
    else if (p.l2 === c1)
        p.l2 = c3;
    else
        p.r2 = c3;
    return root;
};
const lrSplay2 = (root, c3, c2, c1) => {
    const c = c3.l2;
    const d = c3.r2;
    const p = c1.p2;
    c3.p2 = p;
    c3.l2 = c2;
    c3.r2 = c1;
    c2.p2 = c3;
    c2.r2 = c;
    c1.p2 = c3;
    c1.l2 = d;
    if (c)
        c.p2 = c2;
    if (d)
        d.p2 = c1;
    if (!p)
        root = c3;
    else if (p.l2 === c1)
        p.l2 = c3;
    else
        p.r2 = c3;
    return root;
};
const rlSplay2 = (root, c3, c2, c1) => {
    const c = c3.r2;
    const d = c3.l2;
    const p = c1.p2;
    c3.p2 = p;
    c3.l2 = c1;
    c3.r2 = c2;
    c2.p2 = c3;
    c2.l2 = c;
    c1.p2 = c3;
    c1.r2 = d;
    if (c)
        c.p2 = c2;
    if (d)
        d.p2 = c1;
    if (!p)
        root = c3;
    else if (p.l2 === c1)
        p.l2 = c3;
    else
        p.r2 = c3;
    return root;
};
//# sourceMappingURL=util2.js.map