首先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. 下拉框 select

    1.select 用来做什么? select 用于实现下来下拉列表,其 html 结构是这样的: <select name="city" id="city" ...

  2. 南京邮电大学 CTF 逆向部分 Writeup

    Hello,RE! 提示 IDA 中按 R . Google 到 IDA 中 R 快捷键是 Character ,转为字符串. 丢进 IDA(虽然我并不会使用 IDA 有个 strcmp 函数,比较 ...

  3. [转] A*寻路算法C++简单实现

    参考文章: http://www.policyalmanac.org/games/aStarTutorial.htm   这是英文原文<A*入门>,最经典的讲解,有demo演示 http: ...

  4. HTTP与HTTPS相关知识

    URL的开头一般会有http或https,这是访问资源需要的协议类型.有时还会看到ftp.sftp.smb开头的URL,这些都是协议类型.一般使用得最多的还是http和https. HTTP HTTP ...

  5. sql 内联,左联,右联,全联

    联合查询效率较高,以下例子来说明联合查询(内联.左联.右联.全联)的好处: T1表结构(用户名,密码) userid (int) username varchar(20) password  varc ...

  6. The data protection operation was unsuccessful. This may have been caused by not having the user profile loaded for the current thread's user context,

    在iis7.0布署网站后运行的错误,大致意思是:数据保护操作是不成功的.这可能是由于没有为当前线程的用户加载用户配置文件的导致 解决办法: 先为自己的网站新建一个应用程序池,然后新建的应用程序池上右键 ...

  7. asp.net 获取音视频时长 的方法

    http://www.evernote.com/l/AHPMEDnEd65A7ot_DbEP4C47QsPDYLhYdYg/ 日志:   1.第一种方法:   调用:shell32.dll ,win7 ...

  8. vs2010,vs2012注释快捷键

    注释:VS2010是(Ctrl+E,C),VS2012是(Ctrl+K, Ctrl+C) 反注释:VS2010是(Ctrl+E,U),VS2012是(Ctrl+K, Ctrl+U)

  9. Python基础(1):dir(),help()

    Python:3.6.4 开始编写Python程序了...可是,某个模块怎么用呢?模块里的函数怎么用呢?...使用本文介绍的dir().help()两个帮助函数可以 获得绝大部分开发所需要的信息! d ...

  10. 数据库-mysql索引

    MySQL 索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索 ...