fhq Treap模板
来源:互联网 发布:飞跃 推荐 知乎 编辑:程序博客网 时间:2024/06/01 07:15
#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<ctime>using namespace std;struct treap_node{treap_node *left,*right;int wgt,size,fix; char val;treap_node(char val): val(val) {left=right=NULL; size=wgt=1; fix=rand(); }int lsize() { if (left) return left->size; else return 0; }int rsize() { if (right) return right->size; else return 0; }void Maintain() { size=wgt; size+=lsize()+rsize(); }};int n;treap_node *root;typedef pair <treap_node*,treap_node*> droot; treap_node *merge(treap_node *a,treap_node *b){if (!a) return b; if (!b) return a;if (a->fix<b->fix) { a->right=merge(a->right,b); a->Maintain(); return a; }else { b->left=merge(a,b->left); b->Maintain(); return b; }}droot split(treap_node *x,int k){if (!x) return droot(NULL,NULL);droot y;if (x->lsize()>=k) { y=split(x->left,k);x->left=y.second;x->Maintain();y.second=x; }else { y=split(x->right,k-x->lsize()-1); x->right=y.first; x->Maintain(); y.first=x; }return y;}void insert(int k,int l)//从第k位插入l位{droot y; char c; int i;treap_node *temp;y=split(root,k-1);for (i=1;i<=l;++i) { scanf("%c",&c); while (c<32||c>126) scanf("%c",&c); temp=new treap_node(c); y.first=merge(y.first,temp); }root=merge(y.first,y.second);}void del(int k,int l)//从第k位删除l位{droot a,b;a=split(root,k-1);b=split(a.second,l);root=merge(a.first,b.second);}
其他:与线段树类似,reverse和make_same类操作需要打标记并逐层pushdown,min,max等需要updata到root。
0 0
- fhq Treap模板
- fhq Treap模板
- 非旋转treap模板(fhq treap)(洛谷3369,BZOJ3224)
- [NOI2005] 维护数列(fhq-Treap)
- fhq的 挖掘treap的潜力
- 【Treap】Treap模板
- Treap模板+Treap介绍。。。
- Treap模板
- 【Treap模板】
- (模板)treap
- treap 模板
- Treap模板
- treap 模板
- treap模板
- Treap 模板
- 【模板】Treap
- treap模板
- Treap模板
- cocos2d-x3.0 新建项目
- openstack快速入门
- 除去字符串的空格
- 美国智库对中国人的14条评论
- 解析爬虫, Document解析html
- fhq Treap模板
- xargs的简单使用
- <jsp:include> 和<c:import>
- android:persistent="true"相关--保证不被系统kill掉
- MATLAB学习笔记(五):符号计算(符号矩阵+代数方程组求解)
- CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web
- 【消息通信】Android消息驱动机制
- 装上ubuntu之后新手装什么
- 项目一--输出链表中是否有值为X的结点