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的序列,支持插入,将相邻两个元素合并并在该位置生成一个指定权值的元素:查询:区间内的任意一段子区间的最大值减最小 ...
随机推荐
- linux ntp 时间同步
一.时间同步服务器可以将数据库服务器作为同步服务器ntp.conf 保持不变 //启动服务service ntpd start //设置ntpd服务自启动chkconfig ntpd on//检查ch ...
- 动手动脑(lesson 6)
一.继承条件下的构造方法调用 运行结果: 二. 答:构造函数的主要作用是初始化环境,子类是继承的父类,也就是说父类中有的子类全都有,而子类中有的父类不一定有,因此子类运行会调用父类构造函数,而父类不可 ...
- 常用gcc选项
<Linux GCC常用命令> Makefile有三个非常有用的变量.分别是$@,$^,$<代表的意义分别是: $@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件 ...
- [02] URL和HttpURLConnection类
1.URL的概念 统一资源定位符URL(Uniform Resource Locator)是www客户机访问Internet时用来标识资源的名字和地址. URL的基本格式是: <METHOD&g ...
- Python开发技巧
1 python关闭windows进程 python关闭windows进程的方法,涉及Python调用系统命令操作windows进程的技巧 import os command = 'taskkill ...
- 校内模拟赛 Zbq's Music Challenge
Zbq's Music Challenge 题意: 一个长度为n的序列,每个位置可能是1或者0,1的概率是$p_i$.对于一个序列$S$,它的得分是 $$BasicScore=A\times \sum ...
- 常见 Bash 内置变量介绍
目录 $0$1, $2 等等$#$* 与 "$*"$@ 与 "$@"$!$_$$$PPID$?$BASH$BASH_VERSION$EUID 与 $UID$GR ...
- dpkg:错误:正在解析文件 '/var/lib/dpkg/updates/0014' 第 0 行附近:在字段名 #padding 中有换行符问题的解决方法
解决方案如下: sudo rm /var/lib/dpkg/updates/* sudo apt-get update python@ubuntu:~/Desktop/_Welcome_.jpg.ex ...
- C/C++中连接函数strcat的应用(简单讲解)
有位学弟问到我如何将两个字符连接起来,想想java/python里面可以直接用+连接起来,可是C/C++里面有没有这么方便的做法呢? 答案是有的,在C语言的string.h库中有个神奇的函数叫做str ...
- c#代码分析
代码分析是在一个IT行业计算机程序员必须要具有的基本专业技能,在了解一定的专业基础之上去看懂别人编写的代码,分析别人代码实现的功能,以及基本的维护和扩展测试.不同的人有不同的代码风格,要使自己的能要别 ...