来自wjmzbmr的splay模板

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
 + ;
;
struct Node {
    Node*ch[], *p;
    int size, val, mx;
    int add;
    bool rev;
    Node() {
        size = ;
        val = mx = -INF;
        add = ;
    }
    bool d() {
        ];
    }
    void setc(Node*c, int d) {
        ch[d] = c;
        c->p = this;
    }
    void addIt(int ad) {
        add += ad;
        mx += ad;
        val += ad;
    }
    void revIt() {
        rev ^= ;
    }
    void relax();
    void pu() {
        size = ch[]->size + ch[]->size + ;
        mx = max(val, max(ch[]->mx, ch[]->mx));
    }
} Tnull, *null = &Tnull;
Node mem[MAX_N], *C = mem;
void Node::relax() {
    ) {
        ; i < ; ++i)
            if (ch[i] != null)
                ch[i]->addIt(add);
        add = ;
    }
    if (rev) {
        swap(ch[], ch[]);
        ; i < ; ++i)
            if (ch[i] != null)
                ch[i]->revIt();
        rev = ;
    }
}
Node*make(int v) {
    C->ch[] = C->ch[] = null;
    C->size = ;
    C->val = v;
    C->mx = v;
    C->add = ;
    C->rev = ;
    return C++;
}
Node*build(int l, int r) {
    if (l >= r)
        return null;
    ;
    Node*t = make();
    t->setc(build(l, m), );
    t->setc(build(m + , r), );
    t->pu();
    return t;
}
Node*root;
Node*rot(Node*t) {
    Node*p = t->p;
    p->relax();
    t->relax();
    int d = t->d();
    p->p->setc(t, p->d());
    p->setc(t->ch[!d], d);
    t->setc(p, !d);
    p->pu();
    if (p == root)
        root = t;
}
void splay(Node*t, Node*f = null) {
    while (t->p != f) {
        if (t->p->p == f)
            rot(t);
        else
            t->d() == t->p->d() ? (rot(t->p), rot(t)) : (rot(t), rot(t));
    }
    t->pu();
}
Node* select(int k) {
    for (Node*t = root;;) {
        t->relax();
        ]->size;
        if (k == c)
            return t;
        if (k > c)
            k -= c + , t = t->ch[];
        else
            t = t->ch[];
    }
}
Node*&get(int l, int r) { //[l,r)
    Node*L = );
    Node*R = select(r);
    splay(L);
    splay(R, L);
    ];
}
int n, m;
int main() {
    cin >> n >> m;
    root = build(, n + );
    root->p = null;
    ; i < m; ++i) {
        int k, l, r, v;
        scanf("%d%d%d", &k, &l, &r);
        Node*&t = );
        ) {
            scanf("%d", &v);
            t->addIt(v);
            splay(t);
        } ) {
            t->revIt();
            splay(t);
        } else {
            printf("%d\n", t->mx);
        }
    }
}

splay最终模板的更多相关文章

  1. splay旋转模板

    splay旋转模板 void rotate(int x) { int y=f[x],z=son(x);f[x]=f[y]; if (f[x]) t[f[x]][son(y)]=x; t[y][z]=t ...

  2. BZOJ 3224: Tyvj 1728 普通平衡树 or 洛谷 P3369 【模板】普通平衡树-Splay树模板题

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 22483  Solved: 10130[Submit][S ...

  3. 平衡树(Splay)模板

    支持区间操作. 单点操作和区间操作分开使用,需要一起使用需要部分修改. 对应题目FJUTOJ2490 #include<cstdio> #include<cstring> #i ...

  4. fhq treap最终模板

    新学习了fhq treap,厉害了 先贴个神犇的版, from memphis /* Treap[Merge,Split] by Memphis */ #include<cstdio> # ...

  5. [洛谷P3391]【模板】文艺平衡树(Splay)

    题目大意:给定一个$1\sim n$的序列,每次翻转一个区间,输出最后的序列. 解题思路:Splay的区间翻转操作.我借此打了个Splay的模板(运用内存池,但有些功能不确定正确,例如单点插入). 大 ...

  6. CMS模板引擎:XHtmlAction

    前言: 先说说大伙关心的工作上的事,在上家公司任了一个多月的技术经理后,和公司中止了合作关系. 主要原因在于一开始的待遇没谈的太清楚: 1:没有合同,没有公积金,连社保也没交. 2:工资的30%变成了 ...

  7. CodeSmith使用总结--创建一个基础模板

    问:为什么要用CodeSmith? 答曰:因为我懒的写. Codesmith是一款非常不错的懒人工具,我也经常会用到,因为它在“重复代码”方面能够节省我们很多时间,并且解除了我们重复繁琐并且乏味的“码 ...

  8. 再起航,我的学习笔记之JavaScript设计模式30(简单模板模式)

    简单模板模式 概念介绍 简单模板模式(Simple template): 通过格式化字符串拼凑出视图避免创建视图时大量节点操作,优化内存开销. 创建模板 在实际的业务中如果我们需要进行前后台交互,或多 ...

  9. 【BZOJ1500】【NOI2005】维修数列(Splay)

    [BZOJ1500][NOI2005]维修数列(Splay) 题面 不想再看见这种毒瘤题,自己去BZOJ看 题解 Splay良心模板题 真的很简单 我一言不发 #include<iostream ...

随机推荐

  1. [.Net] 手把手带你将自己打造的类库丢到 NuGet 上

    手把手带你将自己打造的类库丢到 NuGet 上 序 我们习惯了对项目右键点击“引用”,选择“管理NuGet 程序包”来下载第三方的类库,可曾想过有一天将自己的打造的类库放到 NuGet 上,让第三者下 ...

  2. CRL快速开发框架升级到3.1

    CRL是一款面向对象的轻量级ORM框架,本着快速开发,使用简便的原则,设计为 无需关心数据库结构,CRL自动维护创建,即写即用(CRL内部有表结构检查机制,保证表结构一致性) 无需第三方工具生成代理类 ...

  3. 通过Matrix进行二维图形仿射变换

    Affine Transformation是一种二维坐标到二维坐标之间的线性变换,保持二维图形的"平直性"和"平行性".仿射变换可以通过一系列的原子变换的复合来 ...

  4. Hibernate(3)——实例总结Hibernate对象的状态和ThreadLoacl封闭的session

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: Hibernate的内部执行过程(CRUD) 对象的状态及其转换图和例子 使用JUnit测试 使用getCur ...

  5. 如何在Windows Server 2008 R2没有磁盘清理工具的情况下使用系统提供的磁盘清理工具

    今天,刚好碰到服务器C盘空间满的情况,首先处理了临时文件和有关的日志文件后空间还是不够用,我知道清理C盘的方法有很多,但今天只分享一下如何在Windows Server 2008 R2没有磁盘清理工具 ...

  6. 嵌入式开发中常见3个的C语言技巧

    Hey,大家好!我是CrazyCatJack.今天我来说几个在嵌入式开发中常用的C语言技巧吧.也许你曾经用过,也许你只是见到过但是没有深入理解.那么今天好好补充下吧^_^ 1.指向函数的指针 指针不光 ...

  7. css3 transition animation nick

    时光转眼即逝,又到周六了,今天写点某部分人看不起的css玩玩! 转换 转换属性transform: 浏览器前缀: -webkit-transform;-o-transform;-moz-transfo ...

  8. [C1] C1FlexGrid 排除非绑定列的验证效果

    一.前言 前提是 C1FlexGrid 中存在数据绑定列和自定义列(非数据绑定列),此时如果该行编辑后出现排他错误,自定义列也会出现验证结果的红色边框: 但是自定义列如果只是一些按钮操作,提示说明什么 ...

  9. Docker的ubuntu镜像安装的容器无ifconfig和ping命令的解决

    Docker的Ubuntu镜像安装的容器无ifconfig命令和ping命令 解决: apt-get update apt install net-tools       # ifconfig apt ...

  10. El表达式的关系运算符

    El表达式的关系运算符: ==  对应  eq !=   对应  ne >    对应  gt <    对应  It