【FHQ-Treap】P4146 序列终结者
题意:
给定一个序列,支持区间加,区间反转,区间max询问
裸的平衡树题,这里采用FHQ-Treap
每个节点多记录一个max值和两个lazy_tag,暴力Push_Down即可(大常数选手)
打完这道模板题可怜的Leven就要去准备初赛了qwq
#include<bits/stdc++.h>
#define writeln(x) write(x),puts("")
#define writep(x) write(x),putchar(' ')
using namespace std;
inline int read(){
int ans=,f=;char chr=getchar();
while(!isdigit(chr)){if(chr=='-') f=-;chr=getchar();}
while(isdigit(chr)){ans=(ans<<)+(ans<<)+chr-;chr=getchar();}
return ans*f;
}void write(int x){
if(x<) putchar('-'),x=-x;
if(x>) write(x/);
putchar(x%+'');
}const int M = 1e5+;
struct P{int l,r,sz,x,s,lz1,lz2,key;}s[M];
int n,m,a[M],root,x,y,z,cnt;
inline void Push_Up(int x){
s[x].sz=s[s[x].l].sz+s[s[x].r].sz+;
s[x].s=s[x].x;
if(s[x].l)s[x].s=max(s[x].s,s[s[x].l].s);
if(s[x].r)s[x].s=max(s[x].s,s[s[x].r].s);
}inline void Push_Down1(int x){
if(!s[x].lz1)return;
swap(s[x].l,s[x].r);
s[s[x].l].lz1^=;
s[s[x].r].lz1^=;
s[x].lz1=;
}inline void Push_Down2(int x){
Push_Down1(x);
if(!s[x].lz2)return;
s[s[x].l].lz2+=s[x].lz2;
s[s[x].l].x+=s[x].lz2;
s[s[x].r].lz2+=s[x].lz2;
s[s[x].l].s+=s[x].lz2;
s[s[x].r].x+=s[x].lz2;
s[s[x].r].s+=s[x].lz2;
s[x].lz2=;
}inline int Merge(int x,int y){
if(!x||!y)return x+y;
Push_Down2(x),Push_Down2(y);
if(s[x].key<s[y].key){
s[x].r=Merge(s[x].r,y);
Push_Up(x);return x;
}s[y].l=Merge(x,s[y].l);
Push_Up(y);return y;
}inline void Split(int now,int sz,int &x,int &y){
if(!now)return x=y=,void();
Push_Down2(now);
if(s[s[now].l].sz>=sz)y=now,Split(s[now].l,sz,x,s[now].l);
else x=now,Split(s[now].r,sz-s[s[now].l].sz-,s[now].r,y);
Push_Up(now);
}inline void Add(){
int l=read(),r=read(),p=read();
Split(root,l-,x,y),Split(y,r-l+,y,z);
s[y].lz2+=p;s[y].s+=p;s[y].x+=p;
root=Merge(Merge(x,y),z);
}inline void Reverse(){
int l=read(),r=read();
Split(root,l-,x,y),Split(y,r-l+,y,z);
s[y].lz1^=;
root=Merge(Merge(x,y),z);
}inline void Query(){
int l=read(),r=read();
Split(root,l-,x,y),Split(y,r-l+,y,z);
printf("%d\n",s[y].s);
root=Merge(Merge(x,y),z);
}inline void Insert(int val){
s[++cnt]=(P){,,,val,val,,,rand()};
root=Merge(cnt,root);
}int main(){
srand(unsigned(time()));
n=read(),m=read();
for(int i=;i<=n;i++)Insert();
while(m--){
int opt=read();
if(opt==)Add();
else if(opt==)Reverse();
else Query();
}return ;
}
【FHQ-Treap】P4146 序列终结者的更多相关文章
- luogu P4146 序列终结者
嘟嘟嘟 这是一道splay基础题. 最坑的一点是,因为有些节点可能没有左儿子或右儿子,所以必须把t[0].Max赋成-INF! 因为这个调了半天,看来回头复习复习splay是对的-- #include ...
- BZOJ1251序列终结者——非旋转treap
题目描述 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这样的,真是没技 ...
- 在平衡树的海洋中畅游(四)——FHQ Treap
Preface 关于那些比较基础的平衡树我想我之前已经介绍的已经挺多了. 但是像Treap,Splay这样的旋转平衡树码亮太大,而像替罪羊树这样的重量平衡树却没有什么实际意义. 然而类似于SBT,AV ...
- FHQ Treap及其可持久化与朝鲜树式重构
FHQ Treap,又称无旋treap,一种不基于旋转机制的平衡树,可支持所有有旋treap.splay等能支持的操作(只有在LCT中会比splay复杂度多一个log).最重要的是,它是OI中唯一一种 ...
- 并不对劲的fhq treap
听说很对劲的太刀流不止会splay一种平衡树,并不对劲的片手流为了反驳他,并与之针锋相对,决定学学高端操作. 很对劲的太刀流-> 据说splay常数极大,但是由于只知道splay一种平衡树能对序 ...
- 平衡树(Splay、fhq Treap)
Splay Splay(伸展树)是一种二叉搜索树. 其复杂度为均摊\(O(n\log n)\),所以并不可以可持久化. Splay的核心操作有两个:rotate和splay. pushup: 上传信息 ...
- [BZOJ 3173] [TJOI 2013] 最长上升子序列(fhq treap)
[BZOJ 3173] [TJOI 2013] 最长上升子序列(fhq treap) 题面 给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数 ...
- [BZOJ1074] [luogu 4036] [JSOI 2008] 火星人 (二分答案+哈希+fhq treap)
[BZOJ1074] [luogu 4036] [JSOI 2008] 火星人 (二分答案+哈希+fhq treap) 题面 给出一个长度为n的字符串,m个操作,字符串仅包含小写英文字母 操作1:在k ...
- 关于非旋FHQ Treap的复杂度证明
非旋FHQ Treap复杂度证明(类比快排) a,b都是sort之后的排列(从小到大) 由一个排列a构造一颗BST,由于我们只确定了中序遍历=a,但这显然是不能确定一棵树的形态的. 由一个排列b构造一 ...
随机推荐
- FreeBSD_11-系统管理——{Part_9-SVN}
一.使用 svn / svnlite 代替 freebsd-update 及 portsnap 等常规工具更新系统及 ports 源码 二.安装可信 ca 机构列表 cd /usr/ports/sec ...
- 前端 Java Python等资源合集大放送
如果需要学习视频,欢迎关注[JAVA乐园]微信公众号,回复[领取资源]菜单一键领取以下所有200G干货资源,获取更多有用技术干货.文档资料.所有文档会持续更新,欢迎关注一起成长! 1.vue全套 Vu ...
- MVC--MVP?
第一部分:什么是MVP?什么是MVC? 1.什么是MVP? M:数据层(数据库.网络.文件存储等等...) V:View和Activity和Fragment以及它们的子类 P:中介->Prese ...
- Spark Streaming设计
- Window10 64bit Tomcat9 安装
最近正在做一个小项目,需要用到Tomcat部署java web. 准备: 1.window 10 64bit 2.jdk1.8.0_181(请自行安装,记得配置好JAVA_HOME) 3.tomcat ...
- Cacti 发送警告邮件
Cacti版本: 0.8.8a 目的:监听CPU 高于1个设定值时发送警告邮件(范例这一台主机有1颗实体CPU,总共2核心) 需要安装的插件: 1.1. thold Threshold,下载使用的是v ...
- URLSearchParams接口用来处理浏览器的url
URLSearchParams 接口定义了一些实用的方法来处理 URL 的查询字符串. URLSearchParams.append()插入一个指定的键/值对作为新的搜索参数. URLSearchPa ...
- fastJson中常用方法以及遇到的“坑”
1.使用fastJson,首先引入fastJson依赖 <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> & ...
- 「THUSC 2016」成绩单 & 方块消除 (区间dp)
成绩单 $f[l][r][mi][mx]$表示从l到r发到还没发的部分的最小值为mi最大值为mx时的最小代价. $f[l][r][0][0]$表示从l到r全部发完的代价. 自己写的无脑dp,枚举中转点 ...
- docker快速安装kibana
一.拉取镜像 docker pull kibana:5.6.9 二.启动容器 docker run --name kibana -e ELASTICSEARCH_URL=http://10.0.0.1 ...