BZOJ4864[BeiJing 2017 Wc]神秘物质——非旋转treap
题目描述
输入
输出
样例输入
5 8 10 2
max 1 3
min 1 3
max 2 4
样例输出
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<bitset>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pr pair<int,int>
#define ll long long
using namespace std;
int ls[200010];
int rs[200010];
int r[200010];
int v[200010];
int mn[200010];
int size[200010];
int mx[200010];
int s[200010];
int t[200010];
int n,m;
char ch[10];
int x,y;
int cnt;
int a,b,c,d;
int root;
int build(int val)
{
int rt=++cnt;
v[rt]=val;
r[rt]=rand();
size[rt]=1;
mx[rt]=mn[rt]=val;
ls[rt]=rs[rt]=0;
t[rt]=s[rt]=1e9+7;
return rt;
}
void pushup(int rt)
{
size[rt]=size[ls[rt]]+size[rs[rt]]+1;
mx[rt]=max(max(mx[ls[rt]],mx[rs[rt]]),v[rt]);
mn[rt]=min(min(mn[ls[rt]],mn[rs[rt]]),v[rt]);
t[rt]=min(min(t[ls[rt]],t[rs[rt]]),s[rt]);
}
int merge(int x,int y)
{
if(!x||!y)
{
return x+y;
}
if(r[x]<r[y])
{
rs[x]=merge(rs[x],y);
pushup(x);
return x;
}
else
{
ls[y]=merge(x,ls[y]);
pushup(y);
return y;
}
}
void split(int rt,int &x,int &y,int k)
{
if(!rt)
{
x=y=0;
return ;
}
if(k<=size[ls[rt]])
{
y=rt;
split(ls[rt],x,ls[y],k);
pushup(rt);
}
else
{
x=rt;
split(rs[rt],rs[x],y,k-size[ls[rt]]-1);
pushup(rt);
}
}
void ins(int k,int val)
{
split(root,a,b,k-1);
split(b,b,c,1);
split(c,c,d,1);
int now=build(val);
t[now]=s[now]=abs(v[now]-v[b]);
if(b==0)
{
t[now]=s[now]=1e9+7;
}
t[c]=s[c]=abs(v[c]-v[now]);
if(c==0)
{
t[c]=s[c]=1e9+7;
}
a=merge(a,b);
a=merge(a,now);
a=merge(a,c);
root=merge(a,d);
}
void del(int k,int val)
{
split(root,a,b,k-1);
split(b,b,c,1);
split(c,c,d,1);
root=merge(a,d);
ins(k-1,val);
}
int query_max(int l,int r)
{
split(root,a,c,r);
split(a,a,b,l-1);
int now=mx[b]-mn[b];
root=merge(merge(a,b),c);
return now;
}
int query_min(int l,int r)
{
l++;
split(root,a,c,r);
split(a,a,b,l-1);
int now=t[b];
root=merge(merge(a,b),c);
return now;
}
int main()
{
srand(12378);
mx[0]=0;
mn[0]=1e9+7;
t[0]=1e9+7;
v[0]=1e9+7;
s[0]=1e9+7;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
if(i==1)
{
root=build(x);
t[root]=s[root]=1e9+7;
}
else
{
ins(i-1,x);
}
}
while(m--)
{
scanf("%s",ch);
scanf("%d%d",&x,&y);
if(ch[1]=='e')
{
del(x,y);
}
else if(ch[1]=='n')
{
ins(x,y);
}
else if(ch[1]=='a')
{
printf("%d\n",query_max(x,y));
}
else
{
printf("%d\n",query_min(x,y));
}
}
}
BZOJ4864[BeiJing 2017 Wc]神秘物质——非旋转treap的更多相关文章
- BZOJ4864 BeiJing 2017 Wc神秘物质(splay)
splay维护区间最大值.最小值.相邻两数差的绝对值的最小值即可. #include<iostream> #include<cstdio> #include<cmath& ...
- [bzoj4864][BeiJing 2017 Wc]神秘物质
来自FallDream的博客,未经允许,请勿转载,谢谢. 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这 一天, 小诚刚从研 ...
- BZOJ4864: [BeiJing 2017 Wc]神秘物质(Splay)
Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这 一天, 小诚刚从研究所得到了一块奇异的陨石样本, 便 ...
- 【BZOJ4864】[BeiJing 2017 Wc]神秘物质 Splay
[BZOJ4864][BeiJing 2017 Wc]神秘物质 Description 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][BeiJing2017Wc]神秘物质_非旋转Treap
神秘物质 bzoj-4864 BeiJing-2017-Wc 题目大意:给定一个长度为n的序列,支持插入,将相邻两个元素合并并在该位置生成一个指定权值的元素:查询:区间内的任意一段子区间的最大值减最小 ...
随机推荐
- Luogu P2661 [NOIP2015] 信息传递
qwq 今天做完并查集突然想起来这道以前做的好(shui)题, 虽然是黄题,但是是并查集一个比较特别的用法 这道题大概可以用求最小环的方式来做,但是从直觉上果然还是并查集w 乍一看只要求出“父→子”即 ...
- 11-(基础入门篇)WiFi模块开发,下载运行第一个程序
https://www.cnblogs.com/yangfengwu/p/9954840.html 第一就是重新刷一下固件,咱们的固件保持一致,有问题好处理 先刷空固件 我用的 所以刷8Mbit的 给 ...
- 搭建mysql cluster
虚拟机搭建Mysql Cluster 参考文档:http://www.cnblogs.com/jackluo/archive/2013/01/19/2868152.html http://www.cn ...
- 【小程序】当遇到bindTap绑定无法跳转到tabbar页面时
如下图: 更换成navigator包裹跳转也不起作用. cart目录在app.json中定义在底部tabBar中 在小程序 导航 文档 最下方表示 所以,以上应改为
- Luogu4528 CTSC2008 图腾 树状数组、容斥
传送门 设$f_i$表示$i$排列的数量,其中$x$表示不确定 那么$$ans=f_{1324}-f_{1432}-f_{1243}=(f_{1x2x}-f_{1423})-(f_{14xx}-f_{ ...
- Iterable接口
Iterable接口 总览 这个接口用来表明可以进行迭代.具体的迭代方式,可以通过iterator()方法获取到一个迭代器,在迭代器中会实现如何获取下一个元素,以及是否迭代结束. java8中源码如下 ...
- nginx解决前端跨域配置
在nginx.conf文件中 添加如上配置: 在ajax中将原来的 url:http://192.168.1.127:8905/findItem 改成:'http://localhost/findIt ...
- C#_根据银行卡卡号判断银行名称
/// <summary> /// 银行信息 /// </summary> public class BankInfo { #region 数组形式存储银行BIN号 /// & ...
- Log4net_简单使用
log4net 有四种主要的组件,分别是Logger(记录器), Repository(库), Appender(附着器)以及 Layout(布局). 第一步:Log4net的安装 Install-P ...
- 四则运算生成器功能完善&&界面设计——结对项目
结对成员:何小松 && 李入云 一.对结对编程的认识 优点: 1)程序员互相帮助,互相教对方,可以得到能力上的互补. 2)可以让编程环境有效地贯彻Design. 3)增强代码和产品质量 ...