博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
treap
阅读量:6257 次
发布时间:2019-06-22

本文共 2270 字,大约阅读时间需要 7 分钟。

然而并不知道treap有什么用

#include
#include
#include
#include
using namespace std;struct node{ node* ch[2]; int r; int v; int s; node(int v) :v(v) { r=rand(); ch[0]=ch[1]=NULL; s=1; } bool operator < (const node &b)const { return r
s; if(ch[1]!=NULL) s+=ch[1]-> s; } int cmp(int x) const { if(v==x) return -1; return x < v ? 0 : 1; }};void rotato(node* &x,int base){ node *k=x->ch[base^1]; x->ch[base^1]=k->ch[base]; k->ch[base]=x; x->sum(); k->sum(); x=k; return ;}void insert(node* &x,int val){ if(x==NULL) x=new node(val); else { int d=(val
v ? 0 : 1); insert(x->ch[d],val); if(x->ch[d]->r > x->r) rotato(x,d^1); } x->sum(); //printf("%d ",x->s);}void remove(node* &x,int val){ int d=x->cmp(val); if(d==-1) { node* u=x; if(x->ch[0]!=NULL&&x->ch[1]!=NULL) { int d1=(x->ch[0]->r > x->ch[1]-> r ? 1 : 0); rotato(x,d1); remove(x->ch[d1],val); } else if(x->ch[0]==NULL) x=x->ch[0]; else x=x->ch[1]; delete u; } else remove(x->ch[d],val); if(x!=NULL) x->sum();}int kth(node* x,int k){ //printf("%d",x->s); if(x==NULL|| k <=0|| k > x->s ) return 0; int s=(x->ch[0] == NULL ? 0 : x->ch[0]->s); if(k==s+1) return x->v; else if(k<=s) return kth(x->ch[0],k); else return kth(x->ch[1],k-s-1);}void merge(node* &src,node* &aim){ if(src->ch[0]!=NULL) merge(src->ch[0],aim); if(src->ch[1]!=NULL) merge(src->ch[1],aim); insert(aim,src->v); delete src; src=NULL;}void removetree(node* &x){ if(x->ch[0]!=NULL) removetree(x->ch[0]); if(x->ch[1]!=NULL) removetree(x->ch[1]); delete x; x=NULL;}int read(){ int s=0,f=1; char in=getchar(); while(in<'0'||in>'9') { if(in=='-') f=-1; in=getchar(); } while(in>='0'&&in<='9') { s=(s<<1)+(s<<3)+in-'0'; in=getchar(); } return s*f;}node *root;int add[200100],get[200100],num;int main(){ int m=read(),n=read(); num=1; root=NULL; for(int i=1;i<=m;i++) add[i]=read(); for(int i=1;i<=n;i++) get[i]=read(); for(int i=1;i<=m;i++) { insert(root,add[i]); //printf("%d",root->s); while(get[num]==i) { printf("%d\n",kth(root,num)); num+=1; } } return 0;}

转载于:https://www.cnblogs.com/Lance1ot/p/8886350.html

你可能感兴趣的文章
【转载】小公司如何管理
查看>>
DOM笔记(十):JavaScript正则表达式
查看>>
关于贴友的一个书本页面简单布局(html+css)的实现
查看>>
input 内容发生改变时触发事件
查看>>
IOS之表视图单元格删除、移动及插入
查看>>
转载翻译简介:关于Flash and C++ Native Extension C++扩展ANE——2
查看>>
【Android】10.4 卡片视图
查看>>
虚化技术的额外开销
查看>>
JS 中 call 和 apply 的理解和使用
查看>>
Codeforces Round #256 (Div. 2)
查看>>
20172309_《程序设计与数据结构(下)》_课堂测试修改报告。
查看>>
Linux发邮件之mail命令
查看>>
113 - Power of Cryptography 浮点数 pow()函数
查看>>
ES6中的Promise使用方法与总结
查看>>
生成文件的MD5、SHA、SHA256
查看>>
(二十九)方法调用之解析
查看>>
Springboot文件上传与下载
查看>>
Windows 8开发 WinRT 对ZIP文件解压缩及文件夹的ZIP压缩
查看>>
博客园
查看>>
Activity与Fragment数据传递之Fragment从Activity获取数据 分类: ...
查看>>