最新要闻
- 亚冠附加赛浙江vs泰港,23人大名单报名为5任意外援+1亚外
- 前巴黎&米兰&罗马球员梅内右膝前十字韧带断裂,将接受手术治疗
- 《博德之门3》开局获得营地宠物教程
- 青龙管业:控股子公司中标2.27亿元钢塑复合管及管件采购项目
- 韩国直播网址有哪些 韩国直播网址
- “清凉曲靖”发力“旅游+”新业态——云南罗平全域旅游风光正好
- 俩成语接龙开头 俩 成语
- 冰箱冻肉快速解冻最好方法(冰箱冻肉如何快速解冻)
- 《黑神话:悟空》上架:价格曝光 2024年夏季登陆PC、PS5和XSX
- 高一课程难度大吗 高一课程
- 北京文化园区SHOW数智圆桌会举办 促增园区运营效益
- 葵花宝典(关于葵花宝典简述)
- “月球-25”号坠毁!俄航天集团总裁:中断月球计划50年是失败主因
- 极氪进化日定档:售价超百万的的极氪001或将发布
- 上市即爆款:宝骏云朵再添4种配色 OTA升级蓄势待发
- 马斯克怼人没输过!OpenAI CEO:当年骂我们都是蠢货
手机
“花8亿元保护资金的古建筑被改成日式餐厅” 官方回应:启动整改违规行为,严肃查处失职渎职
华宝新能(301327)2023年半年报点评:下游去库拖累业绩表现,线下渠道快速扩张
- “花8亿元保护资金的古建筑被改成日式餐厅” 官方回应:启动整改违规行为,严肃查处失职渎职
- 华宝新能(301327)2023年半年报点评:下游去库拖累业绩表现,线下渠道快速扩张
- 顺河回族区组织市民考察团考察社区居民养老项目
- 高级审计师考试《高级审计实务》试题:案例题(四十四)参考答案
- 上海台北城市论坛8月30日在沪举行
- 英杰电气(300820):8月21日北向资金增持29.48万股
家电
弱势无图解FHQ-Treap 及各种乱七八糟的错误方法
众所周知,FHQ-Treap是一个码量少,可区间翻转,能持久化的treap(只是常熟略大)像我这种蒟蒻,想调处有旋Treap或者Splay肯定要个114514年
以下可能以FHQ代表FHQ-Treap(逃
前置芝士
treap的节点拥有两个权值,一个是值,一个是优先级。优先级满足堆的性质,值满足二叉搜索树的性质。当两个权值相同时,treap是固定的。堆的性质以及随机的优先级可以让树深保持在\(\log n\),确保时间复杂度;而二叉搜索树可以带来求排名,前驱,后继等操作。
(资料图片)
前置提醒
FHQ-Treap 的合并要求一个FHQ的值全部小于等于另一个,建议是确定一下哪个大,哪个小。这里以左小右大为例.
操作
1、Update
这个就是和线段树一模一样的Update,不保熟(
void Update(int pos){siz[pos]=cnt[pos]+siz[son[pos][0]]+siz[son[pos][1]]; return;}
siz即FHQ的大小,son[pos][0]代表左儿子,son[pos][1]代表右儿子
2、Split
字面意思,将一个FHQ按权值\(val\)分成小于等于和大于两个。我们将一个FHQ分成\(x\)、\(y\)两个(即根节点为\(x\)、\(y\))本文中左(即\(x\)FHQ)一律小于右(即\(y\)FHQ)
假设我们在原FHQ的节点\(pos\)
若该点的值大于\(val\)由二叉搜索树可知该点和它的右子树节点都大于\(val\),将其置入右(y)FHQ并在左子树中寻找也大于\(val\)的子树,归入该点在\(y\)FHQ所在点的左子树中
若该点的值小于等于\(val\)由二叉搜索树可知该点和它的左子树节点都小于等于\(val\),将其置入左(x)FHQ并在右子树中寻找也小于等于\(val\)的子树,归入该点在\(x\)FHQ所在点的右子树中(可能有点绕)回溯时记得及时在该点Update以保证子树大小正确。
若\(pos\)为0,即空子树,便无法再分
void Split(int pos,int vlx,int &x,int &y){if(pos==0){x=y=0;return;}if(val[pos]<=vlx) x=pos,Split(son[pos][1],vlx,son[pos][1],y);else y=pos,Split(son[pos][0],vlx,x,son[pos][0]);Update(pos);}
3、Merge
将两个FHQ合并,要求一个FHQ的所有值都小于等于另一个。由于值都是已经有大小的,我们可以将\(x\)置入\(y\)的左子树或将\(y\)置入\(x\)的右子树但我们要使优先级满足堆的性质
再次假设我们在两个FHQ的节点\(x\)和\(y\) 这里以小根堆为例
若\(x\)的优先级大于\(y\)优先级,由堆可知\(x\)和它的子树节点的优先级都大于\(y\)的优先级,因为\(x\)的值小于等于\(y\),将其加在\(y\)的左子树下
若\(x\)的优先级小于\(y\)优先级,由堆可知\(y\)和它的子树节点的优先级都大于\(x\)的优先级,因为\(y\)的值大于\(y\),将其加在\(x\)的右子树下
这里等于的条件归在哪都无所谓
回溯时记得及时在该点Update以保证子树大小正确。
若\(x\),\(y\)有一个或多个为0,即存在空节点,直接返回另一个节点或0即可
int Merge(int x,int y){if(x==0||y==0)return x+y;if(rnd[x]>rnd[y]){son[y][0]=Merge(x,son[y][0]),Update(y); return y;}else{son[x][1]=Merge(son[x][1],y),Update(x); return x;}}
4、Get
获得排名为\(vlx\)的树本文将相同的点归在同一点,使用cnt记录其实也可当作不同的点只需修改下Get和插入这里其实和不同的BST一样若\(vlx\)小于等于左子树大小,则进入左子树若\(vlx\)大于左子树大小+该节点个数(即总个数-右子树大小),则减去左子树大小和该点的cnt,进入右子树若\(vlx\)大于左子树大小且小于等于左子树大小+该节点个数,该排名就是该节点的值,return即可
int Get(int pos,int vlx){if(vlxsiz[son[pos][0]]+cnt[pos])return Get(son[pos][1],vlx-siz[son[pos][0]]-cnt[pos]);return val[pos];}
以上的方法都是\(O(log n)\)的,每次都是进入左子树或右子树,总共不超过\(log n\)层
接下来是不用递归的功能
1、插入
要插入\(vlx\)值现将原FHQ分裂出小于等于\(vlx\)的\(x\)和大于的\(y\)再从\(x\)中分出小于等于\(vlx\)的\(x"\)和等于\(vlx\)的\(z\)若\(z\)存在,给节点\(z\)的副本数和大小都加1不存在,则新建一个\(z\)节点再按顺序Merge回去
Split(Root,vlx,x,y);Split(x,vlx-1,x,z);if(z==0) New(z,vlx);else cnt[z]++,siz[z]++;Root=Merge(Merge(x,z),y);
2、删除
说道删除,FHQ直接呵呵嗨只需按插入的方法分出\(x\)若\(z\)存在且副本数大于一,给节点\(z\)的副本数和大小都减1若副本数等于一,直接丢到垃圾桶里(若\(z\)不存在,???删不存在的数???
Split(Root,vlx,x,y);Split(x,vlx-1,x,z);if(cnt[z]>1) cnt[z]--,siz[z]--;else z=0;Root=Merge(Merge(x,z),y);
3、查排名
按\(vlx-1\)分裂出小于等于\(vlx-1\)的\(x\)FHQ答案即是\(x\)大小加1
Split(Root,vlx-1,x,y);write(siz[x]+1),pc("\n");Root=Merge(x,y);
4、查排名对应的树
调用Get即可
write(Get(Root,vlx)),pc("\n");
5、前驱
按\(vlx-1\)分裂出小于等于\(vlx-1\)的\(x\)FHQ\(x\)中的最大值及是x中排名做后的Get出\(x\)中排名为\(siz[x]\)的即可
Split(Root,vlx-1,x,y);write(Get(x,siz[x])),pc("\n");Root=Merge(x,y);
6、后继
按\(vlx\)分裂出大于\(vlx\)的\(y\)FHQ\(y\)中的最小值及是y中排名第一的Get出\(x\)中排名为1的即可
Split(Root,vlx,x,y);write(Get(y,1)),pc("\n");Root=Merge(x,y);
附上完整代码
点击查看代码
#include#define fo(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)#define Ts template#define Tp template#define ll long long#define RS register#define gc getchar#define pc putchar#define I inlineusing namespace std;Tp I Ty wmax(Ty a,Ty b){return a>=b? a:b;}Tp I Ty wmin(Ty a,Ty b){return a<=b? a:b;}namespace WrongIO{Tp I void read(Ty &x){x=0;Ty opt=1;char c=gc();while(!isdigit(c)&&c!="-")c=gc();if(c=="-")opt=-1,c=gc();while(isdigit(c))x=(x<<3)+(x<<1),x+=c-"0",c=gc();x*=opt;return;}Tp I void write(Ty x){short OI_USE[50],OI_top=0;if(x<=0) if(x==0)pc("0");else pc("-"),x*=-1;while(x)OI_USE[++OI_top]=x%10,x/=10;while(OI_top--)pc(OI_USE[OI_top+1]+"0");return;} I void writec(char c[]){int len=strlen(c);for(int i=0;ir)) c=gc();} I void readc(char &c,char val){c=gc();while(c!=EOF&&c!=val) c=gc();} I void readc(char val){char c;c=gc();while(c!=EOF&&c!=val) c=gc();} I void readls(string &s){char c=gc();while(c!="\n") s.push_back(c),c=gc();} Ts I void read(Ty &x,Ar &...y) {read(x),read(y...);}} using namespace WrongIO;int val[100050],cnt[100050],rnd[100050],siz[100050],son[100050][2],ct;int n,Root;void Update(int pos){siz[pos]=cnt[pos]+siz[son[pos][0]]+siz[son[pos][1]]; return;}void New(int &id,int vlx){id=++ct;val[id]=vlx;rnd[id]=rand();siz[id]=cnt[id]=1;return;}int Merge(int x,int y){if(x==0||y==0)return x+y;if(rnd[x]>rnd[y]){son[y][0]=Merge(x,son[y][0]),Update(y); return y;}else{son[x][1]=Merge(son[x][1],y),Update(x); return x;}}void Split(int pos,int vlx,int &x,int &y){if(pos==0){x=y=0;return;}if(val[pos]<=vlx) x=pos,Split(son[pos][1],vlx,son[pos][1],y);else y=pos,Split(son[pos][0],vlx,x,son[pos][0]);Update(pos);}int Get(int pos,int vlx){if(vlxsiz[son[pos][0]]+cnt[pos])return Get(son[pos][1],vlx-siz[son[pos][0]]-cnt[pos]);return val[pos];}int main(){//fo("input5");read(n);for(int i=1;i<=n;i++){int opt,vlx,x,y,z; read(opt,vlx);if(opt==1){Split(Root,vlx,x,y);Split(x,vlx-1,x,z);if(z==0) New(z,vlx);else cnt[z]++,siz[z]++;Root=Merge(Merge(x,z),y);}if(opt==2){Split(Root,vlx,x,y);Split(x,vlx-1,x,z);if(cnt[z]>1) cnt[z]--,siz[z]--;else z=0;Root=Merge(Merge(x,z),y);}if(opt==3){Split(Root,vlx-1,x,y);write(siz[x]+1),pc("\n");Root=Merge(x,y);}if(opt==4){write(Get(Root,vlx)),pc("\n");}if(opt==5){Split(Root,vlx-1,x,y);write(Get(x,siz[x])),pc("\n");Root=Merge(x,y);}if(opt==6){Split(Root,vlx,x,y);write(Get(y,1)),pc("\n");Root=Merge(x,y);}} return 0;}//555,卡芙卡的池子歪了一个最不想要的姬子
雄氏老方,专治各种疑难杂症
1、FHQ-Treap真的短,好多都压成了一行写,导致Merge函数,忘写返回值了(2、若将相同点合成一个点,在副本数加1的同时一定要给大小也加1,这个更新不到,减1同理3、一定要明确两个FHQ的大小关系,不然会有奇怪的事发生4、分裂中的两个分支容易写错,可能会出现死循环或导致死循环,发生MLE或TLE5、一些地方要以值-1来分裂,要注意6、Merge和Split在pos为0时记得退出7-113、留给评论区114、宇宙射线照射导致的UKE,雄氏老方也治不了(
关键词:
弱势无图解FHQ-Treap 及各种乱七八糟的错误方法
VSCode如何为远程安装预设扩展
际华集团:产品具体细节涉及未公开信息,公司将在符合保密和监管的要求下进行信息披露
2021苏州大学开学时间最新消息 2021苏州大学大一开学时间
美国政府才逃脱债务违约又有新威胁:高盛警告9月30日可能政府关门
著名歌唱家,有新职!省委书记出席聘任仪式,省长颁发聘书
一品红:创新药AR882进入全球Ⅲ期临床试验
种植户采摘葡萄供应市场
亚冠附加赛浙江vs泰港,23人大名单报名为5任意外援+1亚外
“花8亿元保护资金的古建筑被改成日式餐厅” 官方回应:启动整改违规行为,严肃查处失职渎职
前巴黎&米兰&罗马球员梅内右膝前十字韧带断裂,将接受手术治疗
2023年7月福特EVOS销量数据发布 共卖了2台
2023年7月日产天籁销量数据发布 共卖了5561台
电脑上截屏快捷键是什么键(快捷键PRTSCR是什么键)
视频码率和比特率是什么意思?(视频码率音频比特率多少合适)
手机颜色大曝光!iQOO Z7 Pro 5G蓝色版本首曝:有弯曲屏
骆驼祥子读后感 优秀1000字作文
看上去很美的花店生意,为什么成了创业黑洞
家里是四世同堂了,在村里申请房基地,可是村里不给批怎么办?
朝鲜高丽航空从平壤到北京的商业航班被取消?外交部回应
大陆或将中止ECFA,“蓝委”呛民进党恬不知耻:马英九时代被骂“卖台”签下来的
IDC:中国折叠屏手机市场持续保持快速增长
名侦探柯南:分享一波哀酱剧照,绝美画面让人陶醉~
V观财报|聚氯乙烯售价降30.58% 北元集团上半年净利减约八成
华宝新能(301327)2023年半年报点评:下游去库拖累业绩表现,线下渠道快速扩张
顺河回族区组织市民考察团考察社区居民养老项目
《博德之门3》开局获得营地宠物教程
百度将于 10 月 17 日举办 Baidu World 2023,将发布多款 AI 原生应用
财政部:1~7月证券交易印花税1280亿元,同比下降30.7%
@高校毕业生 这有一份就业“大礼包”待查收
青龙管业:控股子公司中标2.27亿元钢塑复合管及管件采购项目
realme真我五周年:5G手机即将发布 超1亿销量
立航科技上半年净利降9成 去年上市华西证券保荐
中国与金砖成员间贸易猛增
超1400万人正承受“极端通勤”之痛,还有“解药”吗?
美日韩峰会提到南海与台海,外交部:粗暴干涉中国内政!
因能源价格大跌 德国7月PPI降幅超预期
东方世纪2023年上半年净利-776.47万 亏损增长48.43%
亚香股份:截止8月18日我公司的股东人数为5804户
韩国直播网址有哪些 韩国直播网址
高级审计师考试《高级审计实务》试题:案例题(四十四)参考答案
2022 年中级经济师《经济基础知识》考前模拟卷(40)
诺辉健康首次实现过去12个月经常性盈利 上半年营收8.2亿元同比增长265%
台北蓝前议长陈锦祥陪赖清德拜庙 绿拔桩?
创世纪:截止2023年8月18日,公司股东人数为80,686人,与上期相比股东总人数减少684户
Win10提示重置电脑时出现问题未进行任何更改怎么办 windows10重置电脑时出现问题,未执行任何更改
图解东港股份中报:第二季度单季净利润同比减28.81%
上海台北城市论坛8月30日在沪举行
祁连山(600720.SH):上半年净利润2.38亿元,同比下降52.65%
连硅片都不放过,通威将一体化进行到底 | 见智研究
欧莱雅小美盒:公司微博、微信、抖音等账号将于8月31日停止运营
石家庄自助餐哪里好吃又便宜
益普索:2023年全球旅游及酒店服务业趋势洞察(附下载)
醉酒后竟纵火烧屋!一把火后,男子自己也“凉凉”了
豪江智能(301320):该股换手率大于8%(08-21)
“清凉曲靖”发力“旅游+”新业态——云南罗平全域旅游风光正好
储能板块走低 固德威跌超8% 阳光电源、华宝新能均大跌超6%
谱尼测试(300887):8月21日北向资金增持42.88万股
丹麦荷兰承诺向乌克兰提供F-16战斗机
英杰电气(300820):8月21日北向资金增持29.48万股
崇左专业白癜风医院有哪家:怎样治疗白癜风比较靠谱呢
俩成语接龙开头 俩 成语
虚拟婚礼现实举行 老父母也来了
冰箱冻肉快速解冻最好方法(冰箱冻肉如何快速解冻)
《黑神话:悟空》上架:价格曝光 2024年夏季登陆PC、PS5和XSX
广东队后悔签周琦,胡明轩14分打脸黑子球迷,赵睿离开宏远很兴奋
重疾险不买了能退多钱?有什么影响呢?
奇瑞06上市:11.69万 12.69万 12.99万
商都县新太铁合金有限公司铁合金产能受让公告
长沙师范学院南校区宿舍图片 长沙师范学院
高一课程难度大吗 高一课程
说实话,我以后肯定是不会再买国产车了!买这种车属于是有钱没地方花的主
红得快“凉”得快,2023“消失”的网红,有的热度大降,有的凉了
商务部:我国数字交付服务组织国际竞争力进一步提升
全市场:阿尔梅里想报价国米中场阿戈梅,球员估价约500万欧
大S彻底逆袭! 平安生下儿子得到婆婆认可, 婆媳关系得以缓和
好拼!又有基金经理下矿井调研
宁夏银川:七夕催热“浪漫经济” 鲜花、餐饮开启预订模式
商务部:高标准建设国家数字服务出口基地
国家卫健委:中国居民健康素养水平连续十一年提升
2023年08月21日数字经济涨停板梳理
北京文化园区SHOW数智圆桌会举办 促增园区运营效益
葵大地(关于葵大地简述)
葵花宝典(关于葵花宝典简述)
*ST红相:截至本问题回复日,公司暂无送转计划
领湃科技:市场条件和商业因素会在合作决策中起到关键作用,其中售价原因是其中的一个重要考量因素
* 车型翻倍、销量暴跌 小鹏汽车二季度亏损28亿创新高
英国拟“砸巨款”竞购AI芯片 1亿英镑规模被批“少得可怜”
“南麒北马”精神永续
央视名嘴李瑞英:工作28年零失误,突接儿子坠楼消息,她含泪说出22字
对话古人类 拓展新视野
延长学制更要提升质量
曹妃甸职业技术学院怎么样知乎(曹妃甸职业技术学院怎么样)
港珠澳大桥车流再创新高 8月已6次单日破万
钱江摩托上半年净利润为2.8亿元,同比增长约四成
Pzena Investment Management,LLC增持潍柴动力(02338)126万股 每股作价约10.06港元
封面有数|黑猫投诉有效投诉量突破1500万,近千万件消费纠纷得到解决
朝鲜新型隐身护卫舰高清照首次公开 配备战略巡航导弹
“月球-25”号坠毁!俄航天集团总裁:中断月球计划50年是失败主因
极氪进化日定档:售价超百万的的极氪001或将发布