[bzoj4864][BeiJing 2017 Wc]神秘物质
来自FallDream的博客,未经允许,请勿转载,谢谢。
#include<iostream>
#include<cstdio>
#define MN 200000
using namespace std;
inline int read()
{
int x=;char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')x=x*+ch-'',ch=getchar();
return x;
}
int n,m,a[MN+],b[MN+];
inline int abs(int x){return x<?-x:x;}
struct Splay
{
int cnt,c[MN+][],fa[MN+],size[MN+],mx[MN+],mn[MN+],rt,s[MN+];
void update(int x)
{
int l=c[x][],r=c[x][];
mx[x]=mn[x]=s[x];size[x]=size[l]+size[r]+;
if(l) mx[x]=max(mx[x],mx[l]),mn[x]=min(mn[x],mn[l]);
if(r) mx[x]=max(mx[x],mx[r]),mn[x]=min(mn[x],mn[r]);
}
int build(int*a,int l,int r)
{
if(l>r)return ;
int mid=l+r>>;s[mid]=a[mid];
c[mid][]=build(a,l,mid-);fa[c[mid][]]=mid;
c[mid][]=build(a,mid+,r);fa[c[mid][]]=mid;
update(mid);
return mid;
}
void rotate(int x,int&k)
{
int y=fa[x],z=fa[y],l=c[y][]==x,r=l^;
if(y==k) k=x; else c[z][c[z][]==y]=x;
fa[x]=z;fa[y]=x;fa[c[x][r]]=y;
c[y][l]=c[x][r];c[x][r]=y;
update(y);update(x);
}
void splay(int x,int&k)
{
for(;x!=k;rotate(x,k))
if(fa[x]!=k) rotate(c[fa[fa[x]]][]==fa[x]^c[fa[x]][]==x?x:fa[x],k);
}
int Find(int x,int rk)
{
int Sz=size[c[x][]]+;
if(Sz==rk) return x;
if(Sz>rk) return Find(c[x][],rk);
else return Find(c[x][],rk-Sz);
}
int Split(int l,int r)
{
splay(Find(rt,l),rt);
splay(Find(rt,r),c[rt][]);
return c[c[rt][]][];
}
void Modify(int x,int rk,int v)
{
int Sz=size[c[x][]]+;
if(Sz==rk){s[x]=v;update(x);return;}
else if(Sz<rk) Modify(c[x][],rk-Sz,v);
else Modify(c[x][],rk,v);
update(x);
}
void ins(int&x,int rk,int v,int last)
{
if(!x){x=++cnt;s[x]=mx[x]=mn[x]=v;size[x]=v;fa[x]=last;return;}
int Sz=size[c[x][]]+;
if(Sz<=rk) ins(c[x][],rk-Sz,v,x);
else ins(c[x][],rk,v,x);
update(x);
}
}s,S;
char op[];
int main()
{
n=read();m=read();
for(int i=;i<=n;++i) a[i+]=read(),b[i]=abs(a[i+]-a[i]);
s.rt=s.build(a,,n+);S.rt=S.build(b,,n+);
s.cnt=n+;S.cnt=n+;
for(int i=;i<=m;++i)
{
scanf("%s",op+);int x=read(),y=read();
if(op[]=='e')
{
int z=s.Split(x,x+);S.Split(x,x+);
S.c[S.c[S.rt][]][]=s.c[z][]=s.c[z][]=;
S.s[S.rt]=abs(y-s.s[s.rt]);S.s[S.c[S.rt][]]=abs(s.s[s.c[s.rt][]]-y);
S.update(S.c[S.rt][]);S.update(S.rt);
s.s[z]=y;s.update(z);s.update(s.c[s.rt][]);s.update(s.rt);
}
if(op[]=='n')
{
int b=s.Find(s.rt,x+),a=s.Find(s.rt,x+);
s.ins(s.rt,x+,y,);s.splay(s.cnt,s.rt);
S.Modify(S.rt,x+,abs(y-s.s[b]));
S.ins(S.rt,x+,abs(s.s[a]-y),);S.splay(S.cnt,S.rt);
}
if(op[]=='a')
{
int X=s.Split(x,y+);
printf("%d\n",s.mx[X]-s.mn[X]);
}
if(op[]=='i')
{
int X=S.Split(x,y+);
printf("%d\n",S.mn[X]);
}
}
return ;
}
[bzoj4864][BeiJing 2017 Wc]神秘物质的更多相关文章
- BZOJ4864 BeiJing 2017 Wc神秘物质(splay)
splay维护区间最大值.最小值.相邻两数差的绝对值的最小值即可. #include<iostream> #include<cstdio> #include<cmath& ...
- BZOJ4864[BeiJing 2017 Wc]神秘物质——非旋转treap
题目描述 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这 一天, 小诚刚从研究所得到了一块奇异的陨石样本, 便迫不及待地开始 ...
- BZOJ4864: [BeiJing 2017 Wc]神秘物质(Splay)
Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这 一天, 小诚刚从研究所得到了一块奇异的陨石样本, 便 ...
- 【BZOJ4864】[BeiJing 2017 Wc]神秘物质 Splay
[BZOJ4864][BeiJing 2017 Wc]神秘物质 Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微 ...
- BZOJ_4864_[BeiJing 2017 Wc]神秘物质_Splay
BZOJ4864_[BeiJing 2017 Wc]神秘物质_Splay Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天 ...
- BZOJ 4864: [BeiJing 2017 Wc]神秘物质 解题报告
4864: [BeiJing 2017 Wc]神秘物质 Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子. ...
- BZOJ 4864: [BeiJing 2017 Wc]神秘物质 (块状链表/平衡树 )
这就是一道数据结构裸题啊,最大极差就是区间最大值减最小值,最小极差就是相邻两个数差的最小值.然后平衡树splay/treap或者块状链表维护就行了. 第一次自己写块状链表,蛮好写,就是长..然后就BZ ...
- #4864. [BeiJing 2017 Wc]神秘物质 [FHQ Treap]
这题其实挺简单的,有个东西可能稍微难维护了一点点.. \(merge\ x\ e\) 当前第 \(x\) 个原子和第 \(x+1\) 个原子合并,得到能量为 \(e\) 的新原子: \(insert\ ...
- [bzoj4864][BeiJing2017Wc]神秘物质_非旋转Treap
神秘物质 bzoj-4864 BeiJing-2017-Wc 题目大意:给定一个长度为n的序列,支持插入,将相邻两个元素合并并在该位置生成一个指定权值的元素:查询:区间内的任意一段子区间的最大值减最小 ...
随机推荐
- JAVA对象克隆
1> 为了获取对象的一份拷贝,我们可以利用Object类的clone()方法. 2> 在派生类中覆盖基类的clone(),并声明为public.3> 在派生类的clone()方法中, ...
- 02-移动端开发教程-CSS3新特性(中)
1. 新的背景 背景在CSS3中也得到很大程度的增强,比如背景图片尺寸.背景裁切区域.背景定位参照点.多重背景等. 1.1 background-size设置背景图片的尺寸 cover会自动调整缩放比 ...
- 09-TypeScript中的继承
在后端开发语言中,继承是非常重要的概念,继承可以让子类具有父类的成员和方法,通过实例化子类,就可以访问父类的成员和方法. 在JavaScript中,需要通过原型模式来模拟继承的实现.而在TypeScr ...
- WIN10系统触摸板快捷键
快捷的手势操作,有时候会让人脱离鼠标,只要不是非用不可的情况,基本上这些常用手势就能让我们摆脱鼠标携带不便或者桌子地方小的烦恼.iOS上的快捷手势很是受欢迎,win10上却鲜有人知晓,尤其是非开发人员 ...
- IntelliJ IDEA sass环境配置及常见报错处理
1.下载安装ruby,网上教程很多的,安装完之后在命令行输入ruby -v检查一下是否安装成功了.(注意安装的时候要勾选第二项).
- istio入门(00)istio的学习资源
官网:https://istio.io/ 理论知识: http://www.uml.org.cn/wfw/201710131.asp 环境搭建: http://dockone.io/article/2 ...
- restful架构风格设计准则(一)以资源为中心、自描述的请求响应、资源状态迁移为粒度
读书笔记,原文链接:http://www.cnblogs.com/loveis715/p/4669091.html,感谢作者! 一.需求描述 当用户在某个电子商务网站购物时,他首先查看要购买的商品分类 ...
- 新概念英语(1-45)The boss's letter
新概念英语(1-45)The boss's letter Why can't Pamela type the letter? A:Can you come here a minute, please, ...
- React-redux使用中有关Provider问题
先上错误: Warning: Failed prop type: Invalid prop `children` of type `array` supplied to `Provider`, exp ...
- 译《Time, Clocks, and the Ordering of Events in a Distributed System》
Motivation <Time, Clocks, and the Ordering of Events in a Distributed System>大概是在分布式领域被引用的最多的一 ...