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
解题思路:
Splay维护插入,删除,区间统计答案。
极差最大值为区间最值差,最小值为相邻元素之差。
然后愉快地AC
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#define lll tr[spc].ch[0]
#define rrr tr[spc].ch[1]
#define ls ch[0]
#define rs ch[1]
const int N=;
struct trnt{
int ch[];
int fa;
int E;
int wgt;
int maxval;
int minval;
int abst;
int minab;
}tr[N];
int siz;
int root;
int n,m;
int energy[N];
char cmd[];
bool whc(int spc)
{
return tr[tr[spc].fa].rs==spc;
}
void pushup(int spc)
{
tr[spc].wgt=;
tr[spc].maxval=tr[spc].minval=tr[spc].E;
tr[spc].minab=tr[spc].abst;
if(lll)
{
tr[spc].wgt+=tr[lll].wgt;
tr[spc].maxval=std::max(tr[spc].maxval,tr[lll].maxval);
tr[spc].minval=std::min(tr[spc].minval,tr[lll].minval);
tr[spc].minab=std::min(tr[spc].minab,tr[lll].minab);
}
if(rrr)
{
tr[spc].wgt+=tr[rrr].wgt;
tr[spc].maxval=std::max(tr[spc].maxval,tr[rrr].maxval);
tr[spc].minval=std::min(tr[spc].minval,tr[rrr].minval);
tr[spc].minab=std::min(tr[spc].minab,tr[rrr].minab);
}
return ;
}
void rotate(int spc)
{
int f=tr[spc].fa;
bool k=whc(spc);
tr[f].ch[k]=tr[spc].ch[!k];
tr[spc].ch[!k]=f;
tr[tr[f].fa].ch[whc(f)]=spc;
tr[spc].fa=tr[f].fa;
tr[f].fa=spc;
tr[tr[f].ch[k]].fa=f;
pushup(f);
pushup(spc);
return ;
}
void splay(int spc,int f)
{
while(tr[spc].fa!=f)
{
int ft=tr[spc].fa;
if(tr[ft].fa==f)
{
rotate(spc);
break;
}
if(whc(spc)^whc(ft))
rotate(spc);
else
rotate(ft);
rotate(spc);
}
if(!f)
root=spc;
return ;
}
void Build(int l,int r,int &spc,int f)
{
if(l>r)
return ;
int mid=(l+r)>>;
spc=++siz;
tr[spc].fa=f;
tr[spc].E=energy[mid];
tr[spc].abst=std::abs(energy[mid]-energy[mid+]);
Build(l,mid-,lll,spc);
Build(mid+,r,rrr,spc);
pushup(spc);
return ;
}
int plc(int spc,int v)
{
if(tr[lll].wgt>=v)
return plc(lll,v);
if(tr[lll].wgt+==v)
return spc;
return plc(rrr,v-tr[lll].wgt-);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d",&energy[i]);
Build(,n+,root,);
while(m--)
{
int x,y;
scanf("%s",cmd+);
scanf("%d%d",&x,&y);
if(cmd[]=='i')
{
int spc1=plc(root,x+);
int spc2=plc(root,x+);
int spc=++siz;
splay(spc1,);
splay(spc2,root);
tr[spc1].abst=std::abs(tr[spc1].E-y);
tr[spc].abst=std::abs(tr[spc2].E-y);
tr[spc].fa=spc2;
tr[spc].E=y;
tr[spc2].ls=spc;
pushup(spc);
pushup(spc2);
pushup(root);
}else if(cmd[]=='e')
{
int spc1=plc(root,x),spc2=plc(root,x+);
splay(spc1,);
splay(spc2,root);
tr[spc1].abst=std::abs(y-tr[spc1].E);
int spc=++siz;
tr[spc].fa=tr[root].rs;
tr[spc].E=y;
tr[spc].abst=std::abs(y-tr[spc2].E);
tr[tr[root].rs].ls=spc;
pushup(spc);
pushup(spc2);
pushup(root);
}else if(cmd[]=='i')
{
int spc1=plc(root,x),spc2=plc(root,y+);
splay(spc1,);
splay(spc2,root);
int ans=tr[tr[tr[root].rs].ls].minab;
printf("%d\n",ans);
}else{
int spc1=plc(root,x),spc2=plc(root,y+);
splay(spc1,);
splay(spc2,root);
int ans=tr[tr[tr[root].rs].ls].maxval-tr[tr[tr[root].rs].ls].minval;
printf("%d\n",tr[tr[tr[root].rs].ls].maxval-tr[tr[tr[root].rs].ls].minval);
}
}
return ;
}
BZOJ4864: [BeiJing 2017 Wc]神秘物质(Splay)的更多相关文章
- 【BZOJ4864】[BeiJing 2017 Wc]神秘物质 Splay
[BZOJ4864][BeiJing 2017 Wc]神秘物质 Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微 ...
- BZOJ4864 BeiJing 2017 Wc神秘物质(splay)
splay维护区间最大值.最小值.相邻两数差的绝对值的最小值即可. #include<iostream> #include<cstdio> #include<cmath& ...
- [bzoj4864][BeiJing 2017 Wc]神秘物质
来自FallDream的博客,未经允许,请勿转载,谢谢. 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这 一天, 小诚刚从研 ...
- BZOJ4864[BeiJing 2017 Wc]神秘物质——非旋转treap
题目描述 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这 一天, 小诚刚从研究所得到了一块奇异的陨石样本, 便迫不及待地开始 ...
- BZOJ_4864_[BeiJing 2017 Wc]神秘物质_Splay
BZOJ4864_[BeiJing 2017 Wc]神秘物质_Splay Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天 ...
- BZOJ 4864: [BeiJing 2017 Wc]神秘物质 解题报告
4864: [BeiJing 2017 Wc]神秘物质 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中集成ffmpeg(一):编译ffmpeg
方案选择 Android中集成ffmpeg的codec功能无非两种方式: JNI直接调用,主要用于App开发(无权限修改系统底层),如EXOPlayer,JPlayer等. 集成ffmpeg到OMX, ...
- leetcode -day23 Construct Binary Tree from Inorder and Postorder Traversal & Construct Binary Tree f
1. Construct Binary Tree from Inorder and Postorder Traversal Given inorder and postorder travers ...
- org.xml.sax.SAXParseException: Content is not allowed in prolog
sax错误:org.xml.sax.SAXParseException: Content is not allowed in prolog解决 标签: org. xml. sax. saxparse ...
- cf 864 F. Cities Excursions
F. Cities Excursions There are n cities in Berland. Some pairs of them are connected with m directed ...
- window下搭建Vue.Js开发环境
一.安装node.js.https://nodejs.org/en/download/ 最新包会自动安装npm 二.安装完node之后,npm包含的很多依赖包是部署在国外的,在天朝,大家都知道下载速度 ...
- ES6学习笔记(三)字符串的扩展
ES6 加强了对 Unicode 的支持,并且扩展了字符串对象. 1.字符的Unicode表示法 JavaScript 允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码 ...
- Comput_picture
import requestsfrom pyquery import PyQuerycount = 1url = "https://www.169tp.com/diannaobizhi/&q ...
- 洛谷 P2117 小Z的矩阵
P2117 小Z的矩阵 题目描述 小Z最近迷上了矩阵,他定义了一个对于一种特殊矩阵的特征函数G.对于N*N的矩阵A,A的所有元素均为0或1,则G(A)等于所有A[i][j]*A[j][i]的和对2取余 ...
- 1.6 INSERT语句
1.6 INSERT语句正在更新内容,请稍后
- 深入理解Android(4)——理解Android中的JNI(下)
在前面文章中简单介绍了JNI,这一篇文章来简单看一下jni.h中定义的一些常用方法,来实现通过C++调用Android中的Java代码. 转载请说明出处:http://blog.csdn.net/da ...