【模板】BZOJ 3685: 普通van Emde Boas树——Treap
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3685
据说神犇都是用zkw线段树水过的啊...
我蒟蒻只会写treap,加了fread之后8.5s卡过。
update:之前评测机抽风了,重新交了一遍,测了正常时间。(无耻地加了fwrite

某种意义上算是一道模板题吧。
(一开始我的删除操作写挂了,导致无限WA(捂脸
#include <bits/stdc++.h>
using namespace std;
const int MAXN=3e6+5, MAXB=3e7;
char BUF[MAXB], *cp=BUF;
void rd(int &x){
x=0;
while(*cp<'0'||'9'<*cp) cp++;
while('0'<=*cp&&*cp<='9') x=x*10+*cp-'0', cp++;
}
int N, M, tot;
struct Node{
Node *lc, *rc;
int v, f;
}nd[MAXN], *root;
inline void rrot(Node *&x){Node *y=x->lc; x->lc=y->rc; y->rc=x; x=y;}
inline void lrot(Node *&x){Node *y=x->rc; x->rc=y->lc; y->lc=x; x=y;}
void ins(Node *&x, int v){
if(!x){
x=&nd[++tot]; x->v=v; x->f=rand();
return;
}
if(v==x->v) return;
else if(v<x->v){
ins(x->lc, v);
if(x->f>x->lc->f) rrot(x);
}else{
ins(x->rc, v);
if(x->f>x->rc->f) lrot(x);
}
}
void del(Node *&x, int v){
if(!x) return;
if(v==x->v){
if(!x->lc){x=x->rc; return;}
if(!x->rc){x=x->lc; return;}
Node *y=x->rc, *z=y->lc;
if(!z){y->lc=x->lc; x=y; return;}
while(z->lc) y=z, z=z->lc;
y->lc=z->rc; z->lc=x->lc; z->rc=x->rc; x=z;
}
else if(v<x->v) del(x->lc, v);
else del(x->rc, v);
}
int getmin(){
if(!root) return -1;
Node *x=root;
while(x->lc) x=x->lc;
return x->v;
}
int getmax(){
if(!root) return -1;
Node *x=root;
while(x->rc) x=x->rc;
return x->v;
}
int pre(int v){
Node *x=root, *y=0;
while(x){
if(v<=x->v) x=x->lc;
else y=x, x=x->rc;
}
if(!y) return -1;
return y->v;
}
int suc(int v){
Node *x=root, *y=0;
while(x){
if(v>=x->v) x=x->rc;
else y=x, x=x->lc;
}
if(!y) return -1;
return y->v;
}
int find(int v){
for(Node *x=root; x;){
if(v==x->v) return 1;
else if(v<x->v) x=x->lc;
else x=x->rc;
}
return -1;
}
int main(){
srand(23333333);
fread(BUF, 1, MAXB, stdin);
rd(N),rd(M);
for(int i=0, t, x; i<M; ++i){
rd(t);
if(t==1) rd(x),ins(root,x);
else if(t==2) rd(x),del(root,x);
else if(t==3) printf("%d\n", getmin());
else if(t==4) printf("%d\n", getmax());
else if(t==5) rd(x),printf("%d\n",pre(x));
else if(t==6) rd(x),printf("%d\n",suc(x));
else if(t==7) rd(x),printf("%d\n",find(x));
}
return 0;
}
【模板】BZOJ 3685: 普通van Emde Boas树——Treap的更多相关文章
- BZOJ 3685: 普通van Emde Boas树( 线段树 )
建颗权值线段树就行了...连离散化都不用... 没加读入优化就TLE, 加了就A掉了...而且还快了接近1/4.... ---------------------------------------- ...
- bzoj 3685: 普通van Emde Boas树
3685: 普通van Emde Boas树 Description 设计数据结构支持:1 x 若x不存在,插入x2 x 若x存在,删除x3 输出当前最小值,若不存在输出-14 输出当 ...
- bzoj3685普通van Emde Boas树 线段树
3685: 普通van Emde Boas树 Time Limit: 9 Sec Memory Limit: 128 MBSubmit: 1932 Solved: 626[Submit][Stat ...
- BZOJ_3685_普通van Emde Boas树_权值线段树
BZOJ_3685_普通van Emde Boas树_权值线段树 Description 设计数据结构支持: 1 x 若x不存在,插入x 2 x 若x存在,删除x 3 输出当前最小值,若不存 ...
- 【bzoj3685】普通van Emde Boas树 线段树
普通van Emde Boas树 Time Limit: 9 Sec Memory Limit: 128 MBSubmit: 1969 Solved: 639[Submit][Status][Di ...
- 算法导论笔记——第二十章 van Emde Boas树
当关键字是有界范围内的整数时,能够规避Ω(lglgn)下界的限制,那么在类似的场景下,我们应弄清楚o(lgn)时间内是否可以完成优先队列的每个操作.在本章中,我们将看到:van Emde Boas树支 ...
- 浅谈 van Emde Boas 树——从 u 到 log log u 的蜕变
本文参考算法导论完成. 模板题在此 QwQ 优化的过程比较长,还请读者耐心阅读,认真理解. 最初的想法 我会暴力! 用一个 \(size\) 数组维护每个元素出现的次数. 不细讲,时间复杂度 \(O( ...
- 【BZOJ3685】【zkw权值线段树】普通van Emde Boas树
原题传送门 因为马上要开始搞树套树了,所以学了一波权值线段树...毕竟是会点zkw线段树的,所以zkw线段树大法好! 解题思路: 介绍一下权值线段树吧,其实感觉就是线段树的本义,就是你用线段树维护了数 ...
- 【权值分块】bzoj3685 普通van Emde Boas树
权值分块,虽然渐进复杂度不忍直视,但其极小的常数使得实际运行起来比平衡树快,大多数情况和递归版权值线段树差不多,有时甚至更快.但是被zkw线段树完虐. #include<cstdio> # ...
随机推荐
- 【bzoj3631】[JLOI2014]松鼠的新家 LCA+差分数组
题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在“树”上.松鼠想邀请小熊维尼前来 ...
- AD高级培训PPT总结
AD高级培训PPT总结 https://bbs.sangfor.com.cn/forum.php?mod=viewthread&tid=44905&highlight= 说明: ...
- [洛谷P4777]【模板】扩展中国剩余定理(EXCRT)
题目大意:给你一些关于$x$的方程组:$$\begin{cases}x\equiv a_1\pmod{mod_1}\\x\equiv a_2\pmod{mod_2}\\\vdots\\x\equiv ...
- Android 常用dialog提示对话框
在android应用程序中,经常需要用到dialog对话框让用户知道现在所在进行的操作(比如耗时的操作),或者提示某些信息和状态等,算是比较常用的一个知识点: 1.简单对话框 protected vo ...
- BZOJ5340 & 洛谷4564 & LOJ2552:[CTSC2018]假面——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5340 https://www.luogu.org/problemnew/show/P4564 ht ...
- BZOJ1012:[JSOI2008]最大数——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1012 https://www.luogu.org/problemnew/show/P1198 现在 ...
- BZOJ4571:[SCOI2016]美味——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4571 https://www.luogu.org/problemnew/show/P3293 一家 ...
- 洛谷 P1640 [SCOI2010]连续攻击游戏 解题报告
P1640 [SCOI2010]连续攻击游戏 题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备 ...
- python高效学习路线图
- linux 小技巧
http://blog.csdn.net/xianjie0318/article/details/75712990 1.按内存从大到小排列进程: ps -eo "%C : %p : % ...