题意:

  给定一个序列,支持区间加,区间反转,区间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 序列终结者的更多相关文章

  1. luogu P4146 序列终结者

    嘟嘟嘟 这是一道splay基础题. 最坑的一点是,因为有些节点可能没有左儿子或右儿子,所以必须把t[0].Max赋成-INF! 因为这个调了半天,看来回头复习复习splay是对的-- #include ...

  2. BZOJ1251序列终结者——非旋转treap

    题目描述 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这样的,真是没技 ...

  3. 在平衡树的海洋中畅游(四)——FHQ Treap

    Preface 关于那些比较基础的平衡树我想我之前已经介绍的已经挺多了. 但是像Treap,Splay这样的旋转平衡树码亮太大,而像替罪羊树这样的重量平衡树却没有什么实际意义. 然而类似于SBT,AV ...

  4. FHQ Treap及其可持久化与朝鲜树式重构

    FHQ Treap,又称无旋treap,一种不基于旋转机制的平衡树,可支持所有有旋treap.splay等能支持的操作(只有在LCT中会比splay复杂度多一个log).最重要的是,它是OI中唯一一种 ...

  5. 并不对劲的fhq treap

    听说很对劲的太刀流不止会splay一种平衡树,并不对劲的片手流为了反驳他,并与之针锋相对,决定学学高端操作. 很对劲的太刀流-> 据说splay常数极大,但是由于只知道splay一种平衡树能对序 ...

  6. 平衡树(Splay、fhq Treap)

    Splay Splay(伸展树)是一种二叉搜索树. 其复杂度为均摊\(O(n\log n)\),所以并不可以可持久化. Splay的核心操作有两个:rotate和splay. pushup: 上传信息 ...

  7. [BZOJ 3173] [TJOI 2013] 最长上升子序列(fhq treap)

    [BZOJ 3173] [TJOI 2013] 最长上升子序列(fhq treap) 题面 给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数 ...

  8. [BZOJ1074] [luogu 4036] [JSOI 2008] 火星人 (二分答案+哈希+fhq treap)

    [BZOJ1074] [luogu 4036] [JSOI 2008] 火星人 (二分答案+哈希+fhq treap) 题面 给出一个长度为n的字符串,m个操作,字符串仅包含小写英文字母 操作1:在k ...

  9. 关于非旋FHQ Treap的复杂度证明

    非旋FHQ Treap复杂度证明(类比快排) a,b都是sort之后的排列(从小到大) 由一个排列a构造一颗BST,由于我们只确定了中序遍历=a,但这显然是不能确定一棵树的形态的. 由一个排列b构造一 ...

随机推荐

  1. 转载:vue-cli 脚手架 安装

    声明:本文转载自https://www.cnblogs.com/loveyaxin/p/7094089.html 一. node安装 1)如果不确定自己是否安装了node,可以在命令行工具内执行: n ...

  2. Spring Boot Restful WebAPI集成 OAuth2

    系统采用前后端分离的架构,采用OAuth2协议是很自然的事情. 下面开始实战,主要依赖以下两个组件: <dependency> <groupId>org.springframe ...

  3. 如何删除github里的项目

    1.登录github网站后,就会看到如下画面,在头像下面有个你的项目资源这一栏,假如我要删除名为“hhh”的项目,现在鼠标点进这个项目里面 2.进去后点setting 点进去后,默认是选择了OPtio ...

  4. 【踩坑】IDEA 设置 JVM 参数

    1.可视化界面设置 Run->Edit Configuration... 然后设置 2.配置文件设置 打开 IDEA 安装目录,看到有一个 bin 目录,其中有两个 vmoptions 文件,需 ...

  5. python接口自动化(Cookie_绕过验证码登录)

     python接口自动化(Cookie_绕过验证码登录) 有些登录的接口会有验证码,例如:短信验证码,图形验证码等,这种登录的验证码参数可以从后台获取(或者最直接的可查数据库) 获取不到也没关系,可以 ...

  6. Java中的数据结构有哪些?HashMap的工作原理是什么?

    Java中常用数据结构 常用的数据结构有哈希表,线性表,链表,java.util包中有三个重要的接口:List,Set,Map常用来实现基本的数据结构 HashMap的工作原理 HashMap基于ha ...

  7. 22-5-join

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. MYSQL分数排名

    编写一个 SQL 查询来实现分数排名.如果两个分数相同,则两个分数排名(Rank)相同.请注意,平分后的下一个名次应该是下一个连续的整数值.换句话说,名次之间不应该有“间隔”. +----+----- ...

  9. 去sqlserver日志

    USE [master] GO ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE DNName SET  ...

  10. 本地仓库_remote.repositories(拒绝访问)

    问题描述: 通过阿里云配置本地的 Maven 仓库,使用 Maven 命令在进行打包.编译等一系列操作时候,总是出现提示某个 Jar 文件 ---> 『.....\ _remote.reposi ...