链接

https://www.lydsy.com/JudgeOnline/problem.php?id=1251

思路

好简单的模板题

不过还是wrong了好几发

叶子节点要注意下,不能使用

遇到就不管

写的fhq-treap,OI中常数最大的平衡树,中间还T了一发

代码

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <cstdio>
using namespace std;
const int N=5e5+7;
int read() {
int x=0,f=1;char s=getchar();
for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
return x*f;
}
int n,m;
int ch[N][2],val[N],pri[N],siz[N],ma[N],tag_1[N],tag_2[N];
int max(int a,int b) {
return a>b?a:b;
}
void work1(int rt) {
if(!rt) return;
swap(ch[rt][0],ch[rt][1]);
tag_1[rt]^=1;
}
void work2(int rt,int k) {
if(!rt) return;
val[rt]+=k;
ma[rt]+=k;
tag_2[rt]+=k;
}
void pushdown(int rt) {
if(tag_1[rt]) {
work1(ch[rt][0]);
work1(ch[rt][1]);
tag_1[rt]=0;
}
if(tag_2[rt]) {
work2(ch[rt][0],tag_2[rt]);
work2(ch[rt][1],tag_2[rt]);
tag_2[rt]=0;
}
}
void pushup(int rt) {
ma[rt]=max(val[rt],max(ma[ch[rt][0]],ma[ch[rt][1]]));
siz[rt]=siz[ch[rt][0]]+siz[ch[rt][1]]+1;
}
int cnt;
int build(int l,int r) {
if(l>r) return 0;
int mid=(l+r)>>1,p=++cnt;
ma[p]=val[p]=0,pri[p]=rand(),siz[p]=1;
ch[p][0]=build(l,mid-1);
ch[p][1]=build(mid+1,r);
if(!ch[p][0]) ma[ch[p][0]]=-0x3f3f3f3f;
if(!ch[p][1]) ma[ch[p][1]]=-0x3f3f3f3f;
pushup(p);
return p;
}
int merge(int x,int y) {
pushdown(x),pushdown(y);
if(!x||!y) return x+y;
if(pri[x]<pri[y]) {
ch[x][1]=merge(ch[x][1],y);
pushup(x);
return x;
} else {
ch[y][0]=merge(x,ch[y][0]);
pushup(y);
return y;
}
}
void split(int now,int &x,int &y,int k) {
if(!now) x=y=0;
else {
pushdown(now);
if(siz[ch[now][0]]+1<=k)
x=now,split(ch[now][1],ch[x][1],y,k-siz[ch[now][0]]-1);
else
y=now,split(ch[now][0],x,ch[y][0],k);
pushup(now);
}
}
void debug(int now ){
pushdown(now);
if(!now) return;
debug(ch[now][0]);
cout<<val[now]<<" ";
debug(ch[now][1]);
}
int main() {
n=read(),m=read();
int rt=build(1,n);
for(int i=1;i<=m;++i) {
int opt=read(),l=read(),r=read(),x,y,z;
if(opt==1) {
int v=read();
split(rt,x,z,r);
split(x,x,y,l-1);
work2(y,v);
rt=merge(merge(x,y),z);
}
else if(opt==2) {
split(rt,x,z,r);
split(x,x,y,l-1);
work1(y);
rt=merge(merge(x,y),z);
} else {
split(rt,x,z,r);
split(x,x,y,l-1);
printf("%d\n",ma[y]);
rt=merge(merge(x,y),z);
}
// debug(rt);puts("");
}
return 0;
}
/*
10 3
1 3 9 -5705
2 2 6
3 7 8
*/

bzoj 1251: 序列终结者 平衡树,fhqtreap的更多相关文章

  1. BZOJ 1251 序列终结者(Splay)

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

  2. BZOJ 1251: 序列终结者 [splay]

    1251: 序列终结者 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 3778  Solved: 1583[Submit][Status][Discu ...

  3. BZOJ 1251: 序列终结者

    1251: 序列终结者 Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 3773  Solved: 1579 [Submit][Status][Dis ...

  4. bzoj 1251序列终结者 splay 区间翻转,最值,区间更新

    序列终结者 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 4594  Solved: 1939[Submit][Status][Discuss] De ...

  5. 【BZOJ】1251: 序列终结者(splay)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1251 不行..为什么写个splay老是犯逗,这次又是null的mx没有赋值-maxlongint.. ...

  6. 1251. 序列终结者【平衡树-splay】

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

  7. 【BZOJ】1251: 序列终结者

    [题意]给定含有n个0的的数列. 1.区间加值 2.区间翻转 3.区间求最大值 [算法]平衡树(fhq-treap) 需要特别注意的是: 1.使0点对全局无影响并全程保持(例如求max,t[0].mx ...

  8. 【bzoj1251】序列终结者(伸展树)

    [bzoj1251]序列终结者(伸展树) Description 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我 ...

  9. 【BZOJ】【1251】序列终结者

    Splay 还是splay序列维护,这题我WA了的原因是:在Push_up的时候,当前子树的max我是直接取的L.R和v[x]的最大值,但是如果没有左/右儿子,默认是会访问0号结点的mx值,而这个值没 ...

随机推荐

  1. Git-分支的建立与合并

    举一个实际工作中可能会遇到的分支建立与合并的例子: 开发某个网站. 为实现某个新的需求,创建一个分支. 在这个分支上开展工作. 假设此时,你突然接到一个电话说有个很严重的问题需要紧急修补,那么可以按照 ...

  2. SQLSetConnectAttr

    SQLSetConnectAttr 函数定义: 用法类似于SQLSetEnvAttr,该函数是设置连接的各项属性用的 SQLRETURN SQLSetConnectAttr( SQLHDBC      ...

  3. CNN超参数优化和可视化技巧详解

    https://zhuanlan.zhihu.com/p/27905191 在深度学习中,有许多不同的深度网络结构,包括卷积神经网络(CNN或convnet).长短期记忆网络(LSTM)和生成对抗网络 ...

  4. laravel 服务容器实例——深入理解IoC模式

    刚刚接触laravel,对于laravel的服务容器不是很理解.看了<Laravel框架关键技术解析>和网上的一些资料后对于服务容器有了一些自己的理解,在这里分享给大家 1.依赖 IoC模 ...

  5. Django MTV simple_tag filter inclusion_tag

    Django框架 模型(Model).视图(View)和控制器(Controller),具有耦合性低.重用性高.生命周期成本低等优点. MVC 框架 --  Model -View -Controll ...

  6. P1216 数字金字塔

    P1216  数字金字塔 我们可以用 f [ i ] [ j ] 表示从(1,1)出发,到达(i,j)的最大权值和. (i , j)可以由(i - 1 , j)或者(i - 1 , j - 1)转化来 ...

  7. The Little Prince-12/15

    The Little Prince-12/15 明天四六级考试了呢!!!喵喵喵,愿大家都能取得好成绩. 星星美丽,因为里面有一朵看不见的花. 沙漠美丽,因为沙漠的某处隐藏着一口井. ————生活美好, ...

  8. mysql数据库介绍

    一.数据库概述 二.MySql安装和基本管理 三.mysql基本语句 四.库的操作 五.表的操作 六.数据类型 七.数据类型二 八.完整性约束 九.外键的变种 三种关系 十.数据的增删改 十一.多表查 ...

  9. Camera2点击对焦实现2

    https://www.aliyun.com/jiaocheng/22218.html 阿里云 >  教程中心   >  android教程 >  Camera2点击对焦实现 Cam ...

  10. django 正向,反向

    表名 ,foreignkey, 正向 obj.表名小写_set.all() 反向操作.