首先merge就是先delete两次再insert,Max就是整个区间的最大值减最小值,Min就是区间中所有相邻两数差的最小值。

Splay支持区间最大值,区间最小值,区间相邻差最小值即可。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#define rep(i,l,r) for (int i=(l); i<=(r); i++)
using namespace std; const int N=,inf=1e9;
char op[];
int n,m,nd,rt,x,y,v[N],d[N],sz[N],mx[N],mn[N],mnd[N],a[N],ch[N][],f[N]; int Abs(int x){ return x< ? -x : x; } void upd(int x){
int ls=ch[x][],rs=ch[x][];
sz[x]=sz[ls]+sz[rs]+;
mn[x]=min(v[x],min(mn[ls],mn[rs]));
mx[x]=max(v[x],max(mx[ls],mx[rs]));
mnd[x]=min(d[x],min(mnd[ls],mnd[rs]));
} void rot(int &rt,int x){
int y=f[x],z=f[y],w=ch[y][]==x;
if (y==rt) rt=x; else ch[z][ch[z][]==y]=x;
f[y]=x; f[x]=z; f[ch[x][w^]]=y;
ch[y][w]=ch[x][w^]; ch[x][w^]=y; upd(y);
} void splay(int &rt,int x){
while (x!=rt){
int y=f[x],z=f[y];
if (y!=rt) (ch[z][]==y ^ ch[y][]==x) ? rot(rt,x) : rot(rt,y);
rot(rt,x);
}
upd(x);
} int build(int l,int r){
if (l>r) return ;
int x=++nd,mid=(l+r)>>;
v[x]=a[mid]; d[x]=Abs(a[mid]-a[mid-]); sz[x]=;
f[ch[x][]=build(l,mid-)]=x; f[ch[x][]=build(mid+,r)]=x;
upd(x); return x;
} int find(int x,int k){
if (sz[ch[x][]]+==k) return x;
if (k<=sz[ch[x][]]) return find(ch[x][],k);
else return find(ch[x][],k-sz[ch[x][]]-);
} void ins(int p,int k){
int x=find(rt,p+),y=find(rt,p+);
splay(rt,x); splay(ch[x][],y);
v[++nd]=k; d[nd]=Abs(v[nd]-v[x]); f[nd]=y; sz[nd]=;
ch[y][]=nd; d[y]=Abs(v[y]-v[nd]); upd(nd); upd(y); upd(x);
} void del(int p){
int x=find(rt,p),y=find(rt,p+);
splay(rt,x); splay(ch[x][],y);
ch[y][]=; d[y]=Abs(v[y]-v[x]); upd(y); upd(x);
} int que(int l,int r,int op){
int x=find(rt,l),y=find(rt,r+);
splay(rt,x); splay(ch[x][],y);
return op== ? mx[ch[y][]] : (op== ? mn[ch[y][]] : mnd[ch[y][]]);
} int main(){
freopen("bzoj4864.in","r",stdin);
freopen("bzoj4864.out","w",stdout);
scanf("%d%d",&n,&m); mnd[]=mn[]=inf;
rep(i,,n) scanf("%d",&a[i]);
rt=build(,n+);
rep(i,,m){
scanf("%s%d%d",op,&x,&y);
if (op[]=='e') del(x),del(x),ins(x-,y);
if (op[]=='n') ins(x,y);
if (op[]=='a') printf("%d\n",que(x,y,)-que(x,y,));
if (op[]=='i') printf("%d\n",que(x+,y,));
}
return ;
}

[BZOJ4864][BeiJing2017Wc]神秘物质(splay)的更多相关文章

  1. [bzoj4864][BeiJing2017Wc]神秘物质_非旋转Treap

    神秘物质 bzoj-4864 BeiJing-2017-Wc 题目大意:给定一个长度为n的序列,支持插入,将相邻两个元素合并并在该位置生成一个指定权值的元素:查询:区间内的任意一段子区间的最大值减最小 ...

  2. 【BZOJ4864】神秘物质 [Splay]

    神秘物质 Time Limit: 10 Sec  Memory Limit: 256 MB Description Input Output Sample Input Sample Output 1 ...

  3. 【BZOJ4864】[BeiJing 2017 Wc]神秘物质 Splay

    [BZOJ4864][BeiJing 2017 Wc]神秘物质 Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微 ...

  4. 【BZOJ4864】【BJWC2017】神秘物质 - Splay

    题意: Description 21ZZ 年,冬.小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这一天, 小诚刚从研究所得到了一块奇异的陨石样本, ...

  5. BZOJ4864: [BeiJing 2017 Wc]神秘物质(Splay)

    Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这 一天, 小诚刚从研究所得到了一块奇异的陨石样本, 便 ...

  6. BZOJ 4864 [BJWC2017]神秘物质 (splay)

    题目大意: 让你维护一个序列,支持: 1.合并两个相邻的数为一个新的数 2.在某个位置插入一个数 3.查询一个区间的任意子区间极差的最大值 4.查询一个区间的任意子区间极差的最小值 前两个操作可以用$ ...

  7. 【bzoj4864】神秘物质

    Description 给出一个长度为n的序列,第i个数为ai,进行以下四种操作: merge x e:将当前第x个数和第x+1个数合并,得到一个新的数e: insert x e:在当前第x个数和第x ...

  8. BZOJ_4864_[BeiJing 2017 Wc]神秘物质_Splay

    BZOJ4864_[BeiJing 2017 Wc]神秘物质_Splay Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天 ...

  9. BZOJ 4864: [BeiJing 2017 Wc]神秘物质 解题报告

    4864: [BeiJing 2017 Wc]神秘物质 Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子. ...

随机推荐

  1. js 禁用右键菜单、拖拽、选中、复制

    //禁用拖拽 document.ondragstart = function () { return false; }; /** * 禁用右键菜单 */ document.oncontextmenu ...

  2. const与指针

    C++中const与指针 1.常指针: ; int * const pInt = &x; 其中PInt是常指针,pInt的值无法改变,但其指向的内容可以改变. 2.指向常量的指针 有两种写法: ...

  3. jQuery动态给下拉列表添加一个选项(创建DOM对象)

    使用的函数:

  4. SQLServer 学习相关资料整理【转】

    存储过程: SQL Server 存储过程 博客园上的一篇文章,讲解的非常详细,有测试代码,很实用. sqlserver存储过程中执行动态sql语句  The Curse and Blessings ...

  5. Python图片验证码降噪 — 8邻域降噪

    简介 图片验证码识别的可以分为几个步骤,一般用 Pillow 库或 OpenCV 来实现,这几个过程是: 1.灰度处理&二值化 2.降噪 3.字符分割 4.标准化 5.识别 所谓降噪就是把不需 ...

  6. Mysql 监控性能状态 QPS/TPS【转】

    QPS(Query per second) 每秒查询量 TPS(Transaction per second)每秒事务量 这是Mysql的两个重要性能指标,需要经常查看,和Mysql基准测试的结果对比 ...

  7. java浅复制与深手动构造实现

    首先来看看浅拷贝和深拷贝的定义: 浅拷贝:使用一个已知实例对新创建实例的成员变量逐个赋值,这个方式被称为浅拷贝. 深拷贝:当一个类的拷贝构造方法,不仅要复制对象的所有非引用成员变量值,还要为引用类型的 ...

  8. git summary

    Git 使用经验 缘起 一直想写一篇博文,记录我在使用git时遇到的问题以及解决办法.由于项目忙,偶尔的记录不连续,不成系统.今天有时间记录下来,方便自己以后查看. git 简介及其优势 简单来说,g ...

  9. set,list,map分析

    想了下集合,列表,映射三者关系 set,list,map ArrayList采用数组方式存储数据,继承List; LinkedList采用链表方式存储数据,继承List; 所以数组方式都有下表,以及每 ...

  10. No.2 selenium学习之路之八种基本定位

    selenium的八种定位方式 1.通过id定位     find_element_by_id() send_keys() 输入框输入字符串 click()  鼠标点击事件 注:send_keys输入 ...