#include "bits/stdc++.h"

 using namespace std;

 inline int read(){
int s=,k=;char ch=getchar();
while(ch<''|ch>'') ch=='-'?k=-:,ch=getchar();
while(ch>&ch<='') s=s*+(ch^),ch=getchar();
return s*k;
} const int N=1e5+,inf=0x7fffffff; #define size(t) (t?t->size:0) struct Treap{
Treap *son[];
int fix,val,size;
Treap (int v){
size=,val=v,fix=rand();
son[]=son[]=NULL;
}
inline void update(){
size=+size(son[])+size(son[]);
}
}*root; typedef pair<Treap*,Treap*> D; inline Treap *merge(Treap *a,Treap *b){
if(!a||!b) return a?a:b;
if(a->fix<b->fix){
a->son[]=merge(a->son[],b);a->update();return a;
}else {
b->son[]=merge(a,b->son[]);b->update();return b;
}
} inline D split(Treap *p,int k){
if(!p) return D(NULL,NULL);
D y;
if(size(p->son[])>=k)
y=split(p->son[],k),p->son[]=y.second,p->update(),y.second=p;
else
y=split(p->son[],k--size(p->son[])),p->son[]=y.first,p->update(),y.first=p;
return y;
} inline int get_rnk(int val){
int ret=;
for(Treap *t=root;t;t=t->son[val>t->val])
if(t->val<val) ret+=+size(t->son[]);
return ret;
} inline int findkth(int k){
D x=split(root,k-);
D y=split(x.second,);
Treap *ans=y.first;
root=merge(merge(x.first,ans),y.second);
return ans?ans->val:;
} inline void insert(int val){
int k=get_rnk(val);
D x=split(root,k);
Treap *p=new Treap(val);
root=merge(merge(x.first,p),x.second);
} inline void erase(int val){
int k=get_rnk(val);
D x=split(root,k);
D y=split(x.second,);
root=merge(x.first,y.second);
} int main(){
freopen("phs.in","r",stdin);
freopen("phs.out","w",stdout);
srand();
int m,opt,x;m=read();
while(m--){
opt=read(),x=read();
switch(opt)
{
case :insert(x);break;
case :erase(x);break;
case :printf("%d\n",get_rnk(x)+);break;
case :printf("%d\n",findkth(x));break;
case :printf("%d\n",findkth(get_rnk(x)));break;
case :printf("%d\n",findkth(get_rnk(x+)+));break;
}
}
}

模板——无旋Treap的更多相关文章

  1. 模板 - 无旋Treap

    一般而言作为一棵平衡树只需要插入,删除,值求排名,排名求值,前驱,后继,六个接口. #include<bits/stdc++.h> using namespace std; typedef ...

  2. [模板] 无旋Treap (C++ class)

    注意!本帖不是算法介绍!只是贴代码(逃) //嫌stdlib的rand太慢,手打了一个 /* Author: hotwords */ typedef unsigned int tkey; class ...

  3. 无旋treap的简单思想以及模板

    因为学了treap,不想弃坑去学splay,终于理解了无旋treap... 好像普通treap没卵用...(再次大雾) 简单说一下思想免得以后忘记.普通treap因为带旋转操作似乎没卵用,而无旋tre ...

  4. 模板 - 数据结构 - 可持久化无旋Treap/PersistentFHQTreap

    有可能当树中有键值相同的节点时,貌似是要对Split和Merge均进行复制的,本人实测:只在Split的时候复制得到了一个WA,但只在Merge的时候复制还是AC,可能是恰好又躲过去了.有人说假如确保 ...

  5. 洛谷 - P3391 【模板】文艺平衡树(Splay) - 无旋Treap

    https://www.luogu.org/problem/P3391 使用无旋Treap维护序列,注意的是按顺序插入的序列,所以Insert实际上简化成直接root和Merge合并,但是假如要在序列 ...

  6. 浅谈无旋treap(fhq_treap)

    一.简介 无旋Treap(fhq_treap),是一种不用旋转的treap,其代码复杂度不高,应用范围广(能代替普通treap和splay的所有功能),是一种极其强大的平衡树. 无旋Treap是一个叫 ...

  7. [转载]无旋treap:从单点到区间(例题 BZOJ1500&NOI2005 维护数列 )

    转自ZZH大佬,原文:http://www.cnblogs.com/LadyLex/p/7182631.html 1500: [NOI2005]维修数列 Time Limit: 10 Sec  Mem ...

  8. [转载]无旋treap:从好奇到入门(例题:bzoj3224 普通平衡树)

    转载自ZZH大佬,原文:http://www.cnblogs.com/LadyLex/p/7182491.html 今天我们来学习一种新的数据结构:无旋treap.它和splay一样支持区间操作,和t ...

  9. [您有新的未分配科技点]无旋treap:从好奇到入门(例题:bzoj3224 普通平衡树)

    今天我们来学习一种新的数据结构:无旋treap.它和splay一样支持区间操作,和treap一样简单易懂,同时还支持可持久化. 无旋treap的节点定义和treap一样,都要同时满足树性质和堆性质,我 ...

随机推荐

  1. c# http请求ajax页面

    我们在用Http请求的时候,某些页面是ajax加载的,所以请求过来的页面数据不完整.也就是说ajax局部加载数据的地方,我们请求不到,这时候该怎么办呢? WebDriver+phantomjs 这两个 ...

  2. <mate name="viewport">移动端设置详解

    <meta name="viewport" content="width=device-width,height=device-height,initial-sca ...

  3. 学习MQ(三) 一个实例

    学习MQ(三) 一个实例. 现在有两台机器A和B,分别安装了MQ6.0,我要通过MQ进行A和B之间的双向通信. 我打算分两步,第一步:实现A到B的数据传输. 在A上: 1.创建队列管理器 QM_100 ...

  4. Centos 7 卸载自带的openjdk

    [root@localhost ~]# rpm -qa|grep jdk java-1.6.0-openjdk-1.6.0.0-1.50.1.11.5.el6_3.x86_64 java-1.7.0- ...

  5. 全面解读Java NIO工作原理(3)

    全面解读Java NIO工作原理(3) 2011-12-14 10:31 Rollen Holt Rollen Holt的博客 我要评论(0) 字号:T | T JDK 1.4 中引入的新输入输出 ( ...

  6. Failed building wheel for scandir 解决方案

    unbuntu 16.04 运行 pip install jupyter --upgrade 的时候出现了下面的错误 Failed building wheel for scandir Running ...

  7. Vim PHP环境设置文章

    可能有重复: 在ubuntu 上配置vim的PHP开发环境 http://blog.csdn.net/robertaqi/article/details/6117546 手把手教你把Vim改装成一个I ...

  8. 163邮箱 SMTP发送邮件注意点

    在之前163邮箱注册的时候默认开通SMTP服务的,之后需要自己手动开始. 在配置的时候服务器的地址固定 用户名称就是你的邮箱 密码需要注意的是有的是你邮箱的密码,如果不对需要填写你的授权码!

  9. C游新官网总结

    从2017年9月18号,我开始独立做C游新官网项目.第一次独立完成项目,压力还是挺大的,毕竟还要自己去写前端,前端我已经忘了差不多了. 做这个网站主要是公司开始转型,开始自己建立渠道倒量,这样网站的S ...

  10. Python flask中的配置

    当你开始学习Flask时,配置看上去是小菜一碟.你仅仅需要在config.py定义几个变量,然后万事大吉. 然而当你不得不管理一个生产上的应用的配置时,这一切将变得棘手万分. 你不得不设法保护API密 ...