【模板】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> # ...
随机推荐
- Android开发中如何解析Json
解析Json 有了请求,自然会有响应,那我们该如何解析服务端响应返回给我们的Json数据呢? 了解什么是Json JSON(JavaScript object notation)是一种轻量级的数据交换 ...
- Kingdom and its Cities - CF613D
Meanwhile, the kingdom of K is getting ready for the marriage of the King's daughter. However, in or ...
- Mysql 基本语句练习
一.怎样查看数据库信息? desc 数据库名; 二.怎样查看数据表信息? desc 表名: //查看表的属性和属性值 或者用select语句: //查看表的行记录信息 select ...
- 如何正确实现Page接口分页,用PageImpl 自定义分页
/** * Constructor of {@code PageImpl}. * * @param content the content of this page, must not be {@li ...
- 1406: [AHOI2007]密码箱
1406: [AHOI2007]密码箱 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1591 Solved: 944[Submit][Status][ ...
- [COGS2652]秘术「天文密葬法」
description 题面 给个树,第\(i\)个点有两个权值\(a_i\)和\(b_i\),现在求一条长度为\(m\)的路径,使得\(\frac{\sum a_i}{\sum b_i}\)最小 d ...
- [SP8372-TSUM]Triple Sums
题面在这里 description 某\(B\)姓\(OJ\)权限题 给出\(n\)个正整数\(a[i]\),求\(i<j<k\)且\(S=a[i]+a[j]+a[k]\)的三元组\((i ...
- sass的颜色函数
sass中有些非常实用的颜色处理函数,总结如下 1.颜色加深或变浅 lighten($color,$amount) //颜色变浅 darken($color,$amount) //颜色加深 例如: l ...
- 使用snmp4j实现Snmp功能(二)
相关链接:Snmp学习笔记使用snmp4j实现Snmp功能(一)使用snmp4j实现Snmp功能(二)使用snmp4j实现Snmp功能(三) 前一篇文章讲了如何用snmp4j实现set和get的功能, ...
- 常州模拟赛d7t3 水管
分析:第一问还是很好做的,关键是怎么做第二问.我们可以每次删掉最小生成树上的一条边,然后再求一次最小生成树,看边权和大小和原来的是不是一样的,不过这个做法效率很低. 考虑Kruskal算法的原理,每次 ...