首先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. [转]坐在马桶上看算法:只有五行的Floyd最短路算法

    此算法由Robert W. Floyd(罗伯特·弗洛伊德)于1962年发表在“Communications of the ACM”上.同年Stephen Warshall(史蒂芬·沃舍尔)也独立发表了 ...

  2. css的盒模型手机端兼容写法应该是啥样的呢?

    前言:刚刚接触css3的盒模型,感觉对于解决水平垂直居中.固定宽度/高度和可变宽度/高度同时存在这样的问题很有效.但是最近在看一个腾讯手机端框架(Frozen UI )的时候发现一个很神奇的多行文字截 ...

  3. Virut样本取证特征

    1.网络特征 ant.trenz.pl ilo.brenz.pl 2.文件特征 通过对文件的定位,使用PEID查看文件区段,如果条件符合增加了7个随机字符区段的文件,则判定为受感染文件. 3.受感染特 ...

  4. Linux机器如何在公司内网配置代理

    一.通过上网认证 必须在图形界面下使用浏览器(如Firefox)完成上网认证过程. 请先确保本机已经可以正常访问公司内部网络. Firefox上配置代理: 1)打开Firefox首选项,[高级]-[网 ...

  5. 最长子串(Leetcode-3 Longest Substring Without Repeating Characters)

    Question: Given a string, find the length of the longest substring without repeating characters. Exa ...

  6. 07 go语言

    Home   Alexey Palazhchenko edited this page on 9 Jul · 89 revisions Welcome to the Go wiki, a collec ...

  7. java基础78 Servlet的生命周期

    1.Servlet的生命周期 简单的解析就是: 创建servlet实例(调用构造器)---->调用init()方法---->调用service()方法----->调用destroy( ...

  8. javaweb笔记一

    内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现 外连接: 包括 (1)左外连接(左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右两表都不加限制 一个空的构造器 ...

  9. sql server 提取汉字/数字/字母的方法

    sql server 提取汉字/数字/字母的方法 --提取数字 IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULL DROP FUNCTION DBO.GET_NU ...

  10. 用户说体验 | 关于阿里百川HotFix你需要了解的一些细节

    最近很火的热修复技术,无意中了解到阿里百川也在做,而且Android.iOS两端都支持,所以决定试一试.试用一段时间后,感觉还不错,主要是他们有一个团队在不断维护更新这个产品,可以看到他们的版本更新记 ...