博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018.08.06 bzoj1503: [NOI2004]郁闷的出纳员(非旋treap)
阅读量:5302 次
发布时间:2019-06-14

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

平衡树简单题。
直接用fhgtreap实现分裂和合并就没了。
代码:

#include
#define N 100005using namespace std;typedef pair
res;int n,minn,cnt=0,rt=0,delta=0,son[N][2],siz[N],rd[N],val[N],leave=0;inline void pushup(int p){siz[p]=siz[son[p][0]]+siz[son[p][1]]+1;}inline int newnode(int v){rd[++cnt]=rand(),val[cnt]=v,son[cnt][0]=son[cnt][1]=0,siz[cnt]=1;return cnt;}inline int merge(int a,int b){ if(!a||!b)return a+b; if(rd[a]<=rd[b]){son[a][1]=merge(son[a][1],b),pushup(a);return a;} son[b][0]=merge(a,son[b][0]),pushup(b);return b;}inline res split(int p,int k){ if(!p)return make_pair(0,0); res ans,tmp; if(siz[son[p][0]]>=k){ tmp=split(son[p][0],k); ans.first=tmp.first,son[p][0]=tmp.second,pushup(p),ans.second=p; return ans; } tmp=split(son[p][1],k-siz[son[p][0]]-1); ans.second=tmp.second,son[p][1]=tmp.first,pushup(p),ans.first=p; return ans;}inline int rank(int p,int v){ if(!p)return 0; if(val[p]>=v)return rank(son[p][0],v); return siz[son[p][0]]+1+rank(son[p][1],v);}inline void ins(int v){ int k=rank(rt,v),p=newnode(v); res x=split(rt,k); rt=merge(merge(x.first,p),x.second);}inline void del(){ int k=rank(rt,minn-delta); res x=split(rt,k); rt=x.second,leave+=siz[x.first];}inline int kth(int p,int k){ int rk=son[p][0]?siz[son[p][0]]+1:1; if(k==rk)return val[p]; if(k
=minn)ins(k-delta); if(op[0]=='A')delta+=k; if(op[0]=='S')delta-=k,del(); if(op[0]=='F')printf("%d\n",k>siz[rt]?-1:kth(rt,siz[rt]-k+1)+delta); } printf("%d",leave); return 0;}

转载于:https://www.cnblogs.com/ldxcaicai/p/9738393.html

你可能感兴趣的文章
Java基础知识学习(九)
查看>>
redis在windows下总是报错,就是下面的错误,这是哪里出错了
查看>>
Asp.net窄屏页面 手机端新闻列表
查看>>
Linux 密钥验证
查看>>
windows下UDP服务器和客户端的实现
查看>>
NetAdvantage webdatagrid 控件的一些属性
查看>>
MySQL各版本的区别
查看>>
[poj1006]Biorhythms
查看>>
迭代器
查看>>
elasticsearch type类型创建时注意项目,最新的elasticsearch已经不建议一个索引下多个type...
查看>>
jQury 跳出each循环的方法
查看>>
spring AOP 之五:Spring MVC通过AOP切面编程来拦截controller
查看>>
在编译安装程序时候遇到/usr/bin/ld: cannot find -lxxx的时候的解决办法。
查看>>
使用 INSERT 和 SELECT 子查询插入行
查看>>
shell脚本解析10(练习4)------监视文件
查看>>
ubuntu重装mysql
查看>>
JS 学习笔记
查看>>
English trip -- VC(情景课)1 C What's your name?(review)
查看>>
redirect的错误用法asp.net怎么使用自定义错误
查看>>
在MyEclipse下统计工程的代码(package、行数、类个数)
查看>>