传送门: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的更多相关文章

  1. BZOJ 3685: 普通van Emde Boas树( 线段树 )

    建颗权值线段树就行了...连离散化都不用... 没加读入优化就TLE, 加了就A掉了...而且还快了接近1/4.... ---------------------------------------- ...

  2. bzoj 3685: 普通van Emde Boas树

    3685: 普通van Emde Boas树 Description 设计数据结构支持:1 x  若x不存在,插入x2 x  若x存在,删除x3    输出当前最小值,若不存在输出-14    输出当 ...

  3. bzoj3685普通van Emde Boas树 线段树

    3685: 普通van Emde Boas树 Time Limit: 9 Sec  Memory Limit: 128 MBSubmit: 1932  Solved: 626[Submit][Stat ...

  4. BZOJ_3685_普通van Emde Boas树_权值线段树

    BZOJ_3685_普通van Emde Boas树_权值线段树 Description 设计数据结构支持: 1 x  若x不存在,插入x 2 x  若x存在,删除x 3    输出当前最小值,若不存 ...

  5. 【bzoj3685】普通van Emde Boas树 线段树

    普通van Emde Boas树 Time Limit: 9 Sec  Memory Limit: 128 MBSubmit: 1969  Solved: 639[Submit][Status][Di ...

  6. 算法导论笔记——第二十章 van Emde Boas树

    当关键字是有界范围内的整数时,能够规避Ω(lglgn)下界的限制,那么在类似的场景下,我们应弄清楚o(lgn)时间内是否可以完成优先队列的每个操作.在本章中,我们将看到:van Emde Boas树支 ...

  7. 浅谈 van Emde Boas 树——从 u 到 log log u 的蜕变

    本文参考算法导论完成. 模板题在此 QwQ 优化的过程比较长,还请读者耐心阅读,认真理解. 最初的想法 我会暴力! 用一个 \(size\) 数组维护每个元素出现的次数. 不细讲,时间复杂度 \(O( ...

  8. 【BZOJ3685】【zkw权值线段树】普通van Emde Boas树

    原题传送门 因为马上要开始搞树套树了,所以学了一波权值线段树...毕竟是会点zkw线段树的,所以zkw线段树大法好! 解题思路: 介绍一下权值线段树吧,其实感觉就是线段树的本义,就是你用线段树维护了数 ...

  9. 【权值分块】bzoj3685 普通van Emde Boas树

    权值分块,虽然渐进复杂度不忍直视,但其极小的常数使得实际运行起来比平衡树快,大多数情况和递归版权值线段树差不多,有时甚至更快.但是被zkw线段树完虐. #include<cstdio> # ...

随机推荐

  1. 完全理解Python的 '==' 和 'is'

    '==' 比较的是两个对象的值 'is' 比较的是两个对象的内存地址(id) 下面我们着重理解 'is'.对于这个,我们需要知道:小整数对象池,大整数对象池,以及intern机制 小整数池:Pytho ...

  2. Apple - Hdu5160

    Problem Description We are going to distribute apples to n children. Every child has his/her desired ...

  3. [NOIP2017]宝藏 子集DP

    题面:[NOIP2017]宝藏 题面: 首先我们观察到,如果直接DP,因为每次转移的代价受上一个状态到底选了哪些边的影响,因此无法直接转移. 所以我们考虑分层DP,即每次强制现在加入的点的距离为k(可 ...

  4. [Vue源码分析] v-model实现原理

    最近小组有个关于vue源码分析的分享会,提前准备一下… 前言:我们都知道使用v-model可以实现数据的双向绑定,及实现数据的变化驱动dom的更新,dom的更新影响数据的变化.那么v-model是怎么 ...

  5. 使用C#解析并运行JavaScript代码

    如果想在C#编程中解析并运行JavaScript代码,常见的方式有两种: 利用COM组件“Microsoft Script Control”,可参见:C#使用技巧之调用JS脚本方法一 利用JScrip ...

  6. IE的CSS渲染跟其它浏览器有什么不同

    由于IE系浏览器对标准的支持不够好,导致Web开发中经常需要去处理浏览器兼容性问题,特别有些莫名其妙的问题很让人头疼,今天要说这个问题就是这样的,先从插入CSS的三种方法说起: 外部样式(Extern ...

  7. @RequestParam 注解的使用

    @RequestParam 注解的使用 前言 在SpringMvc后台进行获取数据,一般是两种. 1.request.getParameter(“参数名”) 2.用@RequestParam注解获取 ...

  8. MongoDB:删除操作

    一. 根据查询条件删除文档 查询 id=1 的所有文档 test:PRIMARY> db.test_1.find({id:1}) { "_id" : ObjectId(&qu ...

  9. Codeforces Round #508 (Div. 2) E. Maximum Matching(欧拉路径)

     E. Maximum Matching 题目链接:https://codeforces.com/contest/1038/problem/E 题意: 给出n个项链,每条项链左边和右边都有一种颜色(范 ...

  10. Divide by Three CodeForces - 792C

    A positive integer number n is written on a blackboard. It consists of not more than 105 digits. You ...