splay最终模板
来自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最终模板的更多相关文章
- 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 ...
- BZOJ 3224: Tyvj 1728 普通平衡树 or 洛谷 P3369 【模板】普通平衡树-Splay树模板题
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 22483 Solved: 10130[Submit][S ...
- 平衡树(Splay)模板
支持区间操作. 单点操作和区间操作分开使用,需要一起使用需要部分修改. 对应题目FJUTOJ2490 #include<cstdio> #include<cstring> #i ...
- fhq treap最终模板
新学习了fhq treap,厉害了 先贴个神犇的版, from memphis /* Treap[Merge,Split] by Memphis */ #include<cstdio> # ...
- [洛谷P3391]【模板】文艺平衡树(Splay)
题目大意:给定一个$1\sim n$的序列,每次翻转一个区间,输出最后的序列. 解题思路:Splay的区间翻转操作.我借此打了个Splay的模板(运用内存池,但有些功能不确定正确,例如单点插入). 大 ...
- CMS模板引擎:XHtmlAction
前言: 先说说大伙关心的工作上的事,在上家公司任了一个多月的技术经理后,和公司中止了合作关系. 主要原因在于一开始的待遇没谈的太清楚: 1:没有合同,没有公积金,连社保也没交. 2:工资的30%变成了 ...
- CodeSmith使用总结--创建一个基础模板
问:为什么要用CodeSmith? 答曰:因为我懒的写. Codesmith是一款非常不错的懒人工具,我也经常会用到,因为它在“重复代码”方面能够节省我们很多时间,并且解除了我们重复繁琐并且乏味的“码 ...
- 再起航,我的学习笔记之JavaScript设计模式30(简单模板模式)
简单模板模式 概念介绍 简单模板模式(Simple template): 通过格式化字符串拼凑出视图避免创建视图时大量节点操作,优化内存开销. 创建模板 在实际的业务中如果我们需要进行前后台交互,或多 ...
- 【BZOJ1500】【NOI2005】维修数列(Splay)
[BZOJ1500][NOI2005]维修数列(Splay) 题面 不想再看见这种毒瘤题,自己去BZOJ看 题解 Splay良心模板题 真的很简单 我一言不发 #include<iostream ...
随机推荐
- Dagger2系列之使用方法
本系列只讲使用方法和使用中遇到的问题,如果还对dagger2还不了解的童鞋儿可以参考文章: http://www.jianshu.com/p/cd2c1c9f68d4 http://www.jians ...
- AJAX POST&跨域 解决方案 - CORS
一晃又到新年了,于是开始着手好好整理下自己的文档,顺便把一些自认为有意义的放在博客上,记录成点的点滴. 跨域是我在日常面试中经常会问到的问题,这词在前端界出现的频率不低,主要原因还是 ...
- Hibernate(1)——数据访问层的架构模式
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: 数据库的概念.逻辑.数据模型概念 应用程序的分层体系结构发展 MVC设计模式与四层结构的对应关系 持久层的设 ...
- The Java Enum: A Singleton Pattern [reproduced]
The singleton pattern restricts the instantiation of a class to one object. In Java, to enforce this ...
- SparkStreaming实现Exactly-Once语义
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 译自:http://blog.cloudera.com/blog/2015/03/exactly ...
- Linux系统修改PATH环境变量方法
在Linux安装一些软件通常要添加路径环境变量PATH.PATH环境变量通俗的讲就是把程序的路径"备案"到系统中,这样执行这些程序时就不需要输入完整路径,直接在bash输入程序名就 ...
- asp.net MVC 应用程序的生命周期
下面这篇文章总结了 asp.net MVC 框架程序的生命周期.觉得写得不错,故转载一下. 转载自:http://www.cnblogs.com/yplong/p/5582576.html ...
- 使用PD(PowerDesigner)图如何快速生成创建数据库表的SQL脚本
打开PD软件: 1.新建概念模型(conceptual Data Model) File-->New Model-->Conceptual Data Mode 或者点击工作区,右键--&g ...
- 自己动手写计算器v1.0
今天突发奇想,想着看了还几个设计模式了,倒不如写点东西来实践它们.发现计算器这种就比较合适,打算随着设计模式的学习,会对计算器不断的做改进. 包括功能的增加和算法的改进.初学者难免犯错,希望大家不吝指 ...
- hibernate 中根据id删除一条记录的语句
qid name like content 1 A 1 the first text 2 B 2 the Second text 1 C 3 the Third text 如上表所示,当我们需要某个q ...