(http://www.elijahqi.win/2018/01/26/bzoj4864-beijing-2017-wc%E7%A5%9E%E7%A7%98%E7%89%A9%E8%B4%A8/%20%E2%80%8E)
Description
21ZZ 年,冬。
小诚退休以后, 不知为何重新燃起了对物理学的兴趣。 他从研究所借了些实验仪器,整天研究各种微观粒子。这
一天, 小诚刚从研究所得到了一块奇异的陨石样本, 便迫不及待地开始观测。 在精密仪器的视野下,构成陨石
的每个原子都无比清晰。 小诚发现, 这些原子排成若干列, 每一列的结构具有高度相似性。于是,他决定对单
独一列原子进行测量和测试。被选中的这列共有 N 个顺序排列的原子。 最初, 第 i 个原子具有能量 Ei。 随着
时间推移和人为测试, 这列原子在观测上会产生两种变化:
merge x e 当前第 x 个原子和第 x+1 个原子合并,得到能量为 e 的新原子;
insert x e 在当前第 x 个原子和第 x+1 个原子之间插入一个能量为 e 的新原子。
对于一列原子,小诚关心的是相邻一段中能量最大和能量最小的两个原子的能量差值,
称为区间极差。 因此, 除了观测变化外,小诚还要经常统计这列原子的两类数据:
max x y 当前第 x 到第 y 个原子之间的任意子区间中区间极差的最大值;
min x y 当前第 x 到第 y 个原子之间的任意子区间中区间极差的最小值。
其中, 子区间指的是长度至少是 2 的子区间。
小诚坚信这项研究可以获得诺贝尔物理学奖。为了让小诚早日了结心愿,你能否帮助他实现上述的观测和测量呢?
Input
第一行, 两个整数 N, M, 分别表示最初的原子数目和事件总数。
第二行, N 个整数 E1, E2, …, EN, 由空格隔开。依次表示每个原子的能量。
接下来 M 行, 每行为一个字符串和两个整数, 描述一次事件,格式见题目描述。
N<=100,000,M<=100,000
1 ≤ e, Ei ≤ 109。 设 N’ 为当前时刻原子数目。
对于 merge 类事件, 1 ≤ x ≤ N’-1;
对于 insert 类事件, 1 ≤ x ≤ N’;
对于 max 和 min 类事件, 1 ≤ x < y ≤ N’。
任何时刻,保证 N’ ≥ 2。
Output
输出若干行, 按顺序依次表示每次 max 和 min 类事件的测量结果。
Sample Input
4 3
5 8 10 2
max 1 3
min 1 3
max 2 4
Sample Output
5 2 8
我还是太菜了啊 想着想着就睡着了 还好订了闹钟三点 然后三点开始想 起来开始想写这题 没多久再次阵亡qwq其实后来早晨非常清醒之后 可以想明白 其实这个极值的最大 铁定是我整个区间的最大值减最小值 则极值最小呢一定是我相邻两个数 因为这样的话如果不相邻 那么有可能出现干扰 导致极值变大 所以我维护了序列的最左端的值 最右端的值 还有每个区间的极值最小 注意一些初值的给予 wa了好几发 合并的时候极值最小要更新 还有端点的值都要初始化 初始化的时候还有我维护的区间最小值和最大值也都需要初始化

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define inf 0x3f3f3f3f
#define N 220000
using namespace std;
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();}while(ch<='9'&&ch>='0') x=x*10+ch-'0',ch=getchar();return x*f;
}
int size[N],v[N],a[N],c[N][2],fa[N],min1[N],max1[N],min2[N],left[N],right[N],n,m,cnt,root;
inline void update(int x){int l=c[x][0],r=c[x][1];left[x]=right[x]=inf;size[x]=size[l]+size[r]+1;left[x]=v[x];right[x]=v[x];min2[x]=min(min2[l],min2[r]);max1[x]=max(max1[l],max(v[x],max1[r]));min1[x]=min(min1[l],min(v[x],min1[r]));if (l) left[x]=left[l],min2[x]=min(min2[x],abs(v[x]-right[l]));if (r) right[x]=right[r],min2[x]=min(min2[x],abs(v[x]-left[r]));
}
inline void build(int f,int l,int r){if (l>r) return;int mid=l+r>>1;v[mid]=a[mid];c[f][mid>f]=mid;fa[mid]=f;if(v[mid]!=inf) min1[mid]=max1[mid]=v[mid];build(mid,l,mid-1);build(mid,mid+1,r);update(mid);
}
char op[10];
inline int find(int x,int sz){int l=c[x][0],r=c[x][1];if (size[l]+1==sz) return x;if (sz<=size[l]) return find(l,sz);else return find(r,sz-size[l]-1);
}
inline void rotate(int x,int &tar){int y=fa[x],z=fa[y];if (y==tar) tar=x;else c[z][c[z][1]==y]=x;int l=c[y][1]==x,r=l^1;fa[c[x][r]]=y;fa[y]=x;fa[x]=z;c[y][l]=c[x][r];c[x][r]=y;update(y);update(x);
}
inline void splay(int x,int &tar){while(x!=tar){int y=fa[x],z=fa[y];if (y!=tar){if(c[y][0]==x^c[z][0]==y) rotate(x,tar);else rotate(y,tar);}rotate(x,tar);}
}
inline int split(int x,int y){int xx=find(root,x),yy=find(root,y);splay(yy,root);splay(xx,c[root][0]);return c[xx][1];
}
inline void print(int x){if (c[x][0]) print(c[x][0]);//printf("%d %d %d %d\n",v[x],max1[x],min1[x],size[x]);printf("%d ",v[x]);if (c[x][1]) print(c[x][1]);
}
int main(){freopen("bzoj4864.in","r",stdin);n=read();m=read();cnt=n+2;root=n+3>>1;a[1]=inf;for (int i=2;i<=n+1;++i) a[i]=read(); a[n+2]=inf;min1[0]=min1[1]=min1[n+2]=min2[0]=inf;max1[0]=max1[1]=max1[n+2]=-inf;build(0,1,n+2);for (int i=1;i<=m;++i){scanf("%s",op);//print(root);puts("asdf");if (op[1]=='e'){int x=read(),e=read();int tmp=split(x+1,x+3),y=fa[tmp];v[y]=min1[y]=max1[y]=left[y]=right[y]=e;c[y][1]=0;min2[y]=inf;update(y);update(root);}if (op[1]=='n'){int x=read(),e=read();int xx=find(root,x+1),yy=find(root,x+2);splay(yy,root);splay(xx,c[root][0]);++cnt;v[cnt]=max1[cnt]=min1[cnt]=left[cnt]=right[cnt]=e;size[cnt]=1;c[xx][1]=cnt;min2[cnt]=inf;update(xx);update(root);fa[cnt]=xx;}if (op[1]=='a'){int x=read(),y=read();int tmp=split(x,y+2);printf("%d\n",max1[tmp]-min1[tmp]);}if (op[1]=='i'){int x=read(),y=read();int tmp=split(x,y+2);printf("%d\n",min2[tmp]); }}return 0;
}

bzoj4864 [BeiJing 2017 Wc]神秘物质相关推荐

  1. bzoj4864: [BeiJing 2017 Wc]神秘物质

    4864: [BeiJing 2017 Wc]神秘物质 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 99  Solved: 56 [Submit] ...

  2. BZOJ4864[BeiJing 2017 Wc]神秘物质——非旋转treap

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

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

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

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

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

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

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

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

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

  7. 4864: [BeiJing 2017 Wc]神秘物质

    4864: [BeiJing 2017 Wc]神秘物质 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 92 Solved: 50 [Submit][S ...

  8. [BZOJ]4864: [BeiJing 2017 Wc]神秘物质

    题解:  操作1 分解为删除一个元素和修改一个元素的权值 操作2:插入一个元素 操作3:查询区间里面子区间的极差最大值  等价于直接求区间最大值减去区间最小值 操作4:查询区间子区间里面极差最小值  ...

  9. 【bzoj4864】[BeiJing 2017 Wc]神秘物质 Splay

    原文地址:http://www.cnblogs.com/GXZlegend/p/6801631.html 题目描述 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借 ...

最新文章

  1. LeetCode简单题之旅行终点站
  2. 「2019中国大数据技术大会」超值学生票来啦!
  3. Swift来了,是不是可以入手IOS开发了?
  4. 期末考试前的预习,科目:化工设备与反应器(1)
  5. 使用Dezender对zend加密后的php文件进行解密
  6. met40如何升级成鸿蒙系统,再见了,EMUI11!你好,华为鸿蒙!
  7. abp vnext_SQL Server vNext – Microsoft是否喜欢Linux?
  8. 五年前,跳槽涨薪,你笑了,五年后,跳槽降薪,请接受
  9. JavaScript数据类型之数据类型之间的转换(6)
  10. Linux:写一个简单的服务器
  11. 商业数据可视化分析基础知识
  12. Ruby 从入门到掌握视频教程(31 个视频)
  13. 温习古文之生于忧患,死于安乐
  14. LNB investigation
  15. python 图片二值化后 判断图片是白底黑字,还是黑底白字
  16. facebook女程序员_Facebook正在悄悄地向其独立的事实检查员施加压力,要求他们改变裁决
  17. IDEA自定义模板:快速指定一个数据库映射字段(驼峰生成下划线命名)
  18. 崇实大学经营学转计算机系,韩国崇实大学的IT学科有多顶尖
  19. 解决申请开发者office E5中无法发送手机验证码,reCaptcha加载失败
  20. Mybatis错误——Could not find resource com/kuang/dao/UserMapper.xml

热门文章

  1. UI设计新手必知的字体设计规范!
  2. 孙陶然:公司要与员工分享
  3. Cube实现天空盒子,看了你自己也能做
  4. [DB][mysql]下出现 java.sql.SQLException: Incorrect string value: '\xF4\x80\x8E\xAE\xE8\x83...'
  5. cad墙线打断lisp_CAD绘制墙体时,不打断模式有什么好处?
  6. python random库画多彩蟒蛇_python画彩色蟒蛇
  7. 关于DIN 5510-2德国轨道车辆防火测试标准
  8. 3.文件系统组成和基本操作
  9. python实部和虚部都是浮点数_python实部和虚部都是浮点数_python——Numpy库
  10. tophat 原理_Tophat2比对原理及命令