传送门: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. openstack之keystone部署

    前言 openstack更新频率是挺快的,每六个月更新一次(命名是是以A-Z的方式,Austin,Bexar...Newton).博主建议大家先可一种版本研究,等某一版本研究透彻了,在去研究新的版本. ...

  2. [BZOJ2067]szn

    description BZOJ权限题. solution 一道非常好的二分+贪心题目. 第一问就是\(\frac{\sum_u(deg[u]-1)}{2}+1\). 第二问需要在方案最优的情况下最长 ...

  3. [洛谷P4900]食堂

    题目大意:$n(n\leqslant10^6)$组询问,每组询问给出$l,r(l,r\leqslant10^6)$,求($\{\dfrac ij\}$表示$\dfrac ij$的小数部分): $$\s ...

  4. bzoj1588 [HNOI2002]营业额统计 (treap)

    平衡树裸题 只需要求前驱后驱 treap写法 const mm=<<; maxnumber=; maxn=; var left,right,fix,key:..maxn]of longin ...

  5. 一些技巧 && 常数优化 && 出现の错误

    开坑原因 7.21 今天DTZ大爷教了我一个算欧拉函数的好方法......是质因数复杂度的 这让我想到,这些小技巧小idea,很多时候,可能就是考场上最致命.最一击必杀的"大招" ...

  6. BZOJ1303 [CQOI2009]中位数图 【乱搞】

    1303: [CQOI2009]中位数图 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 3086  Solved: 1898 [Submit][Sta ...

  7. HDU.1596 find the safest road (Floyd)

    HDU.1596 find the safest road (Floyd) 题意分析 与普通的最短路不太相同,本题有些许的变化. 1. 要找到由i到j最安全的路,故在求解的时候要保证mp[i][j]尽 ...

  8. React Patterns

    Contents Stateless function JSX spread attributes Destructuring arguments Conditional rendering Chil ...

  9. Delight for a Cat

    Time Limit: 1000 ms Memory Limit: 512 MB Description ​ 从前,有一只懒猫叫CJB.每个小时,这只猫要么在睡觉,要么在吃东西,但不能一边睡觉一边吃东 ...

  10. HDU 5641

    King's Phone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...