[luogu3369]普通平衡树(替罪羊树模板)
解题关键:由于需要根据平衡进行重建,所以不能进行去重,否则无法保证平衡性。
#include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<iostream> #include<cmath> #include<vector> using namespace std; typedef long long ll;const double alpha=0.7; const int N=1e5+500; int n;namespace ScapegoatTree{struct node{int l,r,v,sz,valid;bool del;}t[N<<2];int tot=0,rt=0; #define ls(o) t[o].l #define rs(o) t[o].r #define pb push_backint new_node(int x){++tot;t[tot].l=t[tot].r=0;t[tot].v=x;t[tot].sz=t[tot].valid=1;t[tot].del=0;return tot;}bool Bad(int o){return (double)t[ls(o)].sz>alpha*t[o].sz||(double)t[rs(o)].sz>alpha*t[o].sz;}void Updata(int o){t[o].sz=t[ls(o)].sz+t[rs(o)].sz+1;t[o].valid=t[ls(o)].valid+t[rs(o)].valid+!t[o].del;}void Dfs(int o,std::vector<int> &v){if(!o) return;Dfs(ls(o),v);if(!t[o].del) v.pb(o);Dfs(rs(o),v);}int Build(std::vector<int> &v,int l,int r){if(l>r) return 0;//原因是右边界不包含int mid=(l+r)>>1,o=v[mid];ls(o)=Build(v,l,mid-1);rs(o)=Build(v,mid+1,r);Updata(o);return o;}void ReBuild(int &o){std::vector<int>v;Dfs(o,v);o=Build(v,0,(int)v.size()-1);}void Insert(int x,int &o){if(!o){o=new_node(x);return ;}if(x>=t[o].v) Insert(x,rs(o));else Insert(x,ls(o));Updata(o);if(Bad(o)) ReBuild(o);return;}//del with rnkvoid Delete(int o,int Rnk){if(!t[o].del&&Rnk==t[ls(o)].valid+1) {t[o].del=1;--t[o].valid;return;}if(Rnk<=t[ls(o)].valid+!t[o].del) Delete(ls(o),Rnk);else Delete(rs(o),Rnk-t[ls(o)].valid-!t[o].del);Updata(o);}int GetRank(int o,int x){int ans=1;while(o){if(t[o].v>=x) o=ls(o);else{ans+=t[ls(o)].valid+!t[o].del;o=rs(o);}}return ans;}int FindKth(int o,int x) {while(o){if(!t[o].del&&t[ls(o)].valid+1==x) {return t[o].v;}if(t[ls(o)].valid>=x) o=ls(o);else {x-=t[ls(o)].valid+!t[o].del;o=rs(o);}}}int GetPred(int o,int x){return FindKth(o,GetRank(o,x)-1);}int GetSucc(int o,int x){return FindKth(o,GetRank(o,x+1));} } using namespace ScapegoatTree;int main() {scanf("%d",&n);rt=0;while(n--) {int op,x;scanf("%d%d",&op,&x);if(op==1) Insert(x,rt);if(op==2) Delete(rt,GetRank(rt,x));if(op==3) printf("%d\n",GetRank(rt,x));if(op==4) printf("%d\n",FindKth(rt,x));if(op==5) printf("%d\n",GetPred(rt,x));if(op==6) printf("%d\n",GetSucc(rt,x));}return 0; }
转载于:https://www.cnblogs.com/elpsycongroo/p/10375214.html
[luogu3369]普通平衡树(替罪羊树模板)相关推荐
- 替罪羊树+3369 【模板】普通平衡树
传送门 一听是平衡树 就jio的很难很难 然而大佬说很简单 (听的时候确实jio的没有想象中的那么难<大佬讲的好orz) 然而 写代码的时候就完全不是了 足足花了我两个晚上啊 终于整的差不多明白 ...
- 【Luogu】P3369 【模板】普通平衡树(树状数组)
P3369 [模板]普通平衡树(树状数组) 一.树状数组 树状数组(Binary Indexed Tree(B.I.T), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据结构. ...
- 洛谷 P3380 bzoj3196 Tyvj1730 【模板】二逼平衡树(树套树)
[模板]二逼平衡树(树套树) 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 查询k在区间内的排名 查询区间内排名为k的值 修改某一位值上的数值 查询k在 ...
- P3369-[模板]普通平衡树【替罪羊树】
正题 评测记录:https://www.luogu.org/recordnew/lists?uid=SSL_WYC_zombieeeeee&pid=P3369&status=& ...
- 替罪羊树—BZOJ3224: Tyvj 1728 普通平衡树
冬令营被平衡树坑了之后,打算苦练一番数据结构(QAQ). 先是打了一下想学好久的替罪羊树. 替罪羊树实现方法很简单,就是在不满足平衡条件的时候暴力重构子树. 调试小结: 1.删除操作分两类情况:如果某 ...
- 【替罪羊树及其应用】替罪羊树总结
update:退役后对这篇文章进行了一些更新,主要增加了一个后缀平衡树的版块.很遗憾的,csp的350给我的OI生涯画上了句号.记得联赛前大概写了10遍平衡树模板,遗憾没有用上.不过代码经过联赛前反复 ...
- BZOJ3435[Wc2014]紫荆花之恋——动态点分治(替罪羊式点分树套替罪羊树)
题目描述 强强和萌萌是一对好朋友.有一天他们在外面闲逛,突然看到前方有一棵紫荆树.这已经是紫荆花飞舞的季节了,无数的花瓣以肉眼可见的速度从紫荆树上长了出来.仔细看看的话,这个大树实际上是一个带权树.每 ...
- 【WC2014】紫荆花之恋【替罪羊思想】【动态点分树】【替罪羊树】
传送门 题意:有一棵开始时没有结点的树,nnn次询问,每次新加一点并给定父结点.到父亲的距离.参数rir_iri,并询问满足dist(u,v)≤ru+rvdist(u,v)\leq r_u+r_vd ...
- 数据结构:树套树-替罪羊树套权值线段树
BZOJ3065 本题是在BZOJ上的处女A,实在不应该拿这样一道题来开头 平衡树套线段树应该是树套树问题里比较难的一种了,当然我记得还有一个替罪羊树套Trie树的题,我是不信自己能写出来的. 外层的 ...
- NKOJ 2703 (WC 2014)紫荆花之恋 (点分治+平衡树+替罪羊)
P2703[WC2014]紫荆花之恋(强数据版) 问题描述 强强和萌萌是一对好朋友.有一天他们在外面闲逛,突然看到前方有一棵紫荆树.这已经是紫荆花废物的季节了,无数的花瓣以肉眼可见的速度从紫荆树上长了 ...
最新文章
- ASP.NET Session 使用报告(转贴)
- 上海交通大学乐经良高数手写笔记-多元微积分
- c++计算机等级考试笔记(1)
- 设计模式-策略模式和工厂模式结合使用
- 关于Hadoop的一些网络资料
- 关于ViewPager使用出现的图片覆盖错误问题
- jenkins中使用rsync, scp命令
- linux删除csv换行符,从CSV保存行删除换行符(Remove linefeed from csv preserving r
- 给RabbitMQ发送消息时,设置请求头Header。
- .Net之Layui多图片上传
- Excel对于筛选后单元格进行“复制”与“粘贴”
- (十五)TcpClient
- TiDB的设计哲学——Make It Work! Make It Right! Make It Fast!
- 网络编辑如何经营网络社区?
- 畅享7 plus android8,华为畅享7plus和荣耀8哪个好?荣耀8与畅享7plus详细区别对比评测...
- 刚刚搬进公寓,应该每个月交100块网费好还是买个随身WiFi?
- jsp简易的图书管理系统
- 关于图片onload事件兼容性处理, 谷歌浏览器版本 56.0.2896.3 (64-bit) 微信客户端浏览器 canvas篇
- CF 678F Lena and Queries
- 2017美团点评校招前端面试题
热门文章
- PRD之道:4个撰写PRD的关键思路
- mysql number decimal_Oracle中的decimal与Number区别
- 集合set中的基数cardinality是什么意思
- c性能大容量cket_水合低共熔电解质有助于改善水性锌电池的性能
- mysql+alter+int_MySQL Alter命令
- 计算机网络在物流领域的应用研究,计算机网络技术在物流经济领域中的应用特点及其作用.doc...
- 怎样呵护友谊_我不善于经营友情,有好的开始却没有好的友谊,怎样建设友情呢?...
- datatable自定义表单或者导出excel按钮,搜索
- vue思维导图(这是我在b站老师下载资源里的讲课流程,用来复习和整体把握还不错)
- 解决Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile