#include<cstdio>
#include<cmath>
#include<algorithm>
#include<ctime>
#include<queue>
#include<cctype>
#include<cstring>
#include<iostream>
#define PAU putchar(' ')
#define ENT putchar('\n')
#define CH for(int d=0;d<=1;d++) if(ch[d])
using namespace std;
const int maxn=+;
struct node{
node*ch[];int r,v,siz;
void init(){r=rand();siz=;ch[]=ch[]=NULL;return;}
void update(){siz=;CH{siz+=ch[d]->siz;}return;}
}treap[maxn],*root[maxn],*nodecnt=treap;
queue<node*>RAM;
node*newnode(){
node*x;
if(!RAM.empty()) x=RAM.front(),RAM.pop();
else x=nodecnt++;
x->init();return x;
}
void del(node*&x){RAM.push(x);return;}
void rotate(node*&x,int d){
node*k=x->ch[d^];x->ch[d^]=k->ch[d];k->ch[d]=x;
x->update();k->update();x=k;return;
}
void insert(node*&x,int v){
if(!x) x=newnode(),x->v=v;
else{
int d=v>x->v;insert(x->ch[d],v);
if(x->ch[d]->r>x->r) rotate(x,d^);
else x->update();
} return;
}
void remove(node*&x,int v){
if(x->v==v){
if(x->ch[]&&x->ch[]){
int d=x->ch[]->r>x->ch[]->r;
rotate(x,d);remove(x->ch[d],v);
}
else{
node*k=x;
if(x->ch[]) x=x->ch[];
else x=x->ch[];
del(k);
}
}
else remove(x->ch[v>x->v],v);
if(x) x->update();return;
}
void print(node*&x){
if(!x) return;
print(x->ch[]);
printf("%d ",x->v);
print(x->ch[]);
return;
}
int find(node*x,int rank){
if(x->siz<rank||rank<) return -;
int kth=x->ch[]?x->ch[]->siz+:;
if(kth==rank) return x->v;
if(kth>rank) return find(x->ch[],rank);
else return find(x->ch[],rank-kth);
}
int fa[maxn];
int findset(int x){return x==fa[x]?x:fa[x]=findset(fa[x]);}
void merge(node*&x,node*&y){
if(!y)return;if(!x){x=y;del(y);return;}
merge(x,y->ch[]);
merge(x,y->ch[]);
insert(x,y->v);
return;
}
void merge(int a,int b){
a=findset(a);b=findset(b);
if(a==b) return;
if(root[a]->siz<root[b]->siz) swap(a,b);
merge(root[a],root[b]);fa[b]=a;
return;
}
inline int read(){
int x=,sig=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')sig=-;ch=getchar();}
while(isdigit(ch))x=*x+ch-'',ch=getchar();
return x*=sig;
}
inline char readc(){
char ch=getchar();
while(!isalpha(ch)) ch=getchar();
return ch;
}
inline void write(int x){
if(x==){putchar('');return;}if(x<)putchar('-'),x=-x;
int len=,buf[];while(x)buf[len++]=x%,x/=;
for(int i=len-;i>=;i--)putchar(buf[i]+'');return;
}
int n,q,v[maxn];
void init(){
srand(time());
n=read();q=read();
for(int i=;i<=n;i++) root[i]=newnode(),v[i]=root[i]->v=read(),fa[i]=i;
return;
}
void work(){
int a,b;char tp;
while(q--){
tp=readc();a=read();b=read();
if(tp=='b') merge(a,b);
else if(tp=='q') write(find(root[findset(a)],b)),ENT;
else{
remove(root[findset(a)],v[a]);
insert(root[findset(a)],b);
v[a]=b;
}
}
return;
}
void print(){
return;
}
int main(){init();work();print();return ;}

treap修订的更多相关文章

  1. fhq treap最终模板

    新学习了fhq treap,厉害了 先贴个神犇的版, from memphis /* Treap[Merge,Split] by Memphis */ #include<cstdio> # ...

  2. BZOJ 1691: [Usaco2007 Dec]挑剔的美食家 [treap 贪心]

    1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 786  Solved: 391[Submit][S ...

  3. BZOJ 1862: [Zjoi2006]GameZ游戏排名系统 [treap hash]

    1862: [Zjoi2006]GameZ游戏排名系统 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1318  Solved: 498[Submit][ ...

  4. 非旋treap模板

    bzoj3580 非旋转treap 在大神教导下发现split一段区间时先split右边再split左边比较好写 #include <cstdio> #include <cstdli ...

  5. POJ2985 The k-th Largest Group[树状数组求第k大值+并查集||treap+并查集]

    The k-th Largest Group Time Limit: 2000MS   Memory Limit: 131072K Total Submissions: 8807   Accepted ...

  6. [普通平衡树treap]【学习笔记】

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 9046  Solved: 3840[Submit][Sta ...

  7. UVALive5031 Graph and Queries(Treap)

    反向操作,先求出最终状态,再反向操作. 然后就是Treap 的合并,求第K大值. #include<cstdio> #include<iostream> #include< ...

  8. 【Treap】bzoj1588-HNOI2002营业额统计

    一.题目 Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司 ...

  9. hdu 4585 Shaolin treap

    Shaolin Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Problem ...

随机推荐

  1. [Angular 2] The form export from NgFormControl

    In last post, we need to create an instanse variable: sku: AbstructControl; We can get rid of this b ...

  2. digoal -阿里云postgrel大神

    https://yq.aliyun.com/users/1384833841157402?spm=5176.100239.blogrightarea51131.3.T5LRsF

  3. nginx url 重写 [转]

    本文转自 http://www.jbxue.com/article/2187.html 本文介绍nginx URL重写的相关知识,包括301重定向的内容等,希望对大家有所帮助. nginx rewri ...

  4. (转)H264(NAL简介与I帧判断)

    1.NAL全称Network Abstract Layer, 即网络抽象层.         在H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(N ...

  5. 9.5noip模拟试题

    题目名称 正确答案 序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer.o ...

  6. js的定位实现和ip查询

    sina的api var GetLocationFromSina = function (successFunc, errorFunc) { $.getScript('http://int.dpool ...

  7. Android比较实用的属性

    ImageView //设置图片填充整个背景 android:scaleType="fitXY"

  8. Android Marquee

    android:singleLine="true" android:marqueeRepeatLimit="marquee_forever" android:e ...

  9. SqlDependency 的使用

    1.SqlDependency是什么: SqlDependency 对象表示应用程序和 SQL Server 实例间的查询通知依赖关系.应用程序可以创建一个 SqlDependency 对象并进行注册 ...

  10. hibernate_validator_04

    对象图--个人觉得就是关联验证 ean Validation API不仅能够用来校验单个的实例对象,还能够用来校验完整的对象图.要使用这个功能,只需要在一个有关联关系的字段或者属性上标注 @Valid ...