BZOJ_4864_[BeiJing 2017 Wc]神秘物质_Splay
BZOJ4864_[BeiJing 2017 Wc]神秘物质_Splay
Description
Input
Output
Sample Input
5 8 10 2
max 1 3
min 1 3
max 2 4
Sample Output
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 200050
#define ls ch[p][0]
#define rs ch[p][1]
#define get(x) (ch[f[x]][1]==x)
int ch[N][2],f[N],siz[N],mn[N],mx[N],rt,sz,mxrange[N],mnrange[N],val[N],tot;
int n,m,a[N],head[N],tail[N];
char opt[10];
int fabs(int x){return x>0?x:-x;}
void pushup(int p) {
siz[p]=siz[ls]+siz[rs]+1;
mx[p]=max(val[p],max(mx[ls],mx[rs]));
mn[p]=min(val[p],min(mn[ls],mn[rs]));
head[p]=ls?head[ls]:p;
tail[p]=rs?tail[rs]:p;
mnrange[p]=min(mnrange[ls],mnrange[rs]);
if(ls) mnrange[p]=min(mnrange[p],fabs(val[p]-val[tail[ls]]));
if(rs) mnrange[p]=min(mnrange[p],fabs(val[p]-val[head[rs]]));
}
void rotate(int x) {
int y=f[x],z=f[y],k=get(x);
ch[y][k]=ch[x][!k]; f[ch[y][k]]=y;
ch[x][!k]=y; f[y]=x; f[x]=z;
if(z) ch[z][ch[z][1]==y]=x;
pushup(y); pushup(x);
if(rt==y) rt=x;
}
void splay(int x,int y) {
for(int fa;(fa=f[x])!=y;rotate(x))
if(f[fa]!=y)
rotate(get(fa)==get(x)?fa:x);
}
int find(int x) {
int p=rt;
while(1) {
if(x<=siz[ls]) p=ls;
else {
x-=siz[ls]+1;
if(!x) return p;
p=rs;
}
}
}
void build(int fa,int l,int r) {
if(l>r) return ;
int mid=(l+r)>>1;
ch[fa][mid>fa]=mid;
f[mid]=fa;
val[mid]=a[mid-1];
build(mid,l,mid-1);
build(mid,mid+1,r);
pushup(mid);
}
void print() {
int i;
printf("tot=%d\n",tot);
for(i=1;i<=tot;i++) {
int p=find(i);
printf("p=%d,val[p]=%d,siz[p]=%d\n",p,val[p],siz[p]);
}
}
int main() {
scanf("%d%d",&n,&m);
int i,x,y,p;
mx[0]=0; mn[0]=mnrange[0]=0x3fffffff;
for(i=1;i<=n;i++) scanf("%d",&a[i]);
build(0,1,n+2);
rt=(n+3)>>1; sz=n+2; tot=n+2;
while(m--) {
scanf("%s%d%d",opt,&x,&y);
//print();
if(opt[1]=='e') {
tot--;
p=x+3; x=find(x); p=find(p); splay(x,0); splay(p,x);
ch[ls][0]=ch[ls][1]=0; val[ls]=y;
pushup(ls); pushup(p); pushup(x);
}else if(opt[0]=='i') {
tot++;
x++; p=x+1; x=find(x); p=find(p); splay(x,0); splay(p,x);
sz++; ls=sz; f[sz]=p; val[sz]=y;
pushup(sz); pushup(p); pushup(x);
}else if(opt[1]=='a') {
x=find(x); p=find(y+2); splay(x,0); splay(p,x);
printf("%d\n",mx[ls]-mn[ls]);
}else {
x=find(x); p=find(y+2); splay(x,0); splay(p,x);
printf("%d\n",mnrange[ls]);
}
}
}
BZOJ_4864_[BeiJing 2017 Wc]神秘物质_Splay的更多相关文章
- BZOJ 4864: [BeiJing 2017 Wc]神秘物质 解题报告
4864: [BeiJing 2017 Wc]神秘物质 Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子. ...
- 【BZOJ4864】[BeiJing 2017 Wc]神秘物质 Splay
[BZOJ4864][BeiJing 2017 Wc]神秘物质 Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微 ...
- [bzoj4864][BeiJing 2017 Wc]神秘物质
来自FallDream的博客,未经允许,请勿转载,谢谢. 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这 一天, 小诚刚从研 ...
- BZOJ4864[BeiJing 2017 Wc]神秘物质——非旋转treap
题目描述 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这 一天, 小诚刚从研究所得到了一块奇异的陨石样本, 便迫不及待地开始 ...
- BZOJ4864 BeiJing 2017 Wc神秘物质(splay)
splay维护区间最大值.最小值.相邻两数差的绝对值的最小值即可. #include<iostream> #include<cstdio> #include<cmath& ...
- BZOJ4864: [BeiJing 2017 Wc]神秘物质(Splay)
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】神秘物质 [Splay]
神秘物质 Time Limit: 10 Sec Memory Limit: 256 MB Description Input Output Sample Input Sample Output 1 ...
随机推荐
- 收藏 - android
收藏 - android开发 2018-05-04 16:39:36 介绍:这篇文章是收藏系列的开山第一篇,主要收藏了跟android开发有关的一些内容,也算是内容汇总,后期会持续更新: 内容目录 1 ...
- 二叉树的序列化和反序列化(Java)
请实现两个函数,分别用来序列化和反序列化二叉树 序列化就是将二叉树以字符串输出,反序列化:根据自己输出的字符串,构建二叉树. 这里先序遍历输出,且为了方便反序列化,各个节点","隔 ...
- 你必须知道的261个Java语言问题
1. Java语言的运行机制: Java既不是编译型语言也不是解释型语言,它是编译型和解释型语言的结合体.首先采用通用的java编译器将Java源程序编译成为与平台无关的字节码文件(class文件), ...
- Spring Cloud入门教程 - Zuul实现API网关和请求过滤
简介 Zuul是Spring Cloud提供的api网关和过滤组件,它提供如下功能: 认证 过滤 压力测试 Canary测试 动态路由 服务迁移 负载均衡 安全 静态请求处理 动态流量管理 在本教程中 ...
- 7. Selenium的基本使用
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 32.0px "PingFang SC" } span.s1 { font: 32.0p ...
- SpringMvc+AngularJS通过CORS实现跨域方案
什么是跨域请求问题? 这个问题的起因在于现代浏览器默认都会基于安全原因而阻止跨域的ajax请求,这是现代浏览器中必备的功能,但是往往给开发带来不便. 但跨域的需求却一直都在,为了跨域,勤劳勇敢的程序猿 ...
- MySql 时间操作(今天,昨天,7天,30天,本月,上月)
1 . 查看当天日期 select current_date(); 2. 查看当天时间 select current_time(); 3.查看当天时间日期 select current_timesta ...
- Sending forms through JavaScript
https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript As in the ...
- unity零基础开始学习做游戏(四)biu~biu~biu发射子弹打飞机
-------小基原创,转载请给我一个面子 主角都能移动了,那不得做点什么伸张正义,守护世界和平的事嘛,拿起家伙biu~biu~biu~ 首先得做一个好人和一个坏人 老规矩,Canvas下创建两个Im ...
- Android之淘宝商品列表长按遮罩效果
先来看看淘宝.唯品会长按商品的效果,以及简单Demo的效果: 首先分析一下场景: 长按条目时,弹出遮罩的效果遮挡在原来的条目布局上: 页面滑动或点击其他的条目,上一个正在遮罩的条目遮罩消 ...