treap树模板

news/2025/9/29 15:44:54/文章来源:https://www.cnblogs.com/sadmax11/p/19118882
#include<bits/stdc++.h>
using namespace std;
#define maxn 100010
#define INF 1e9
int ch[maxn][2],dat[maxn],size[maxn],val[maxn],cnt[maxn];
int tot,root;int newno(int v){val[++tot]=v;cnt[tot]=1;dat[tot]=rand();size[tot]=1;return tot;
}void pushup(int id){size[id]=size[ch[id][0]]+size[ch[id][1]]+cnt[id];
}void build(){root=newno(-INF);ch[root][1]=newno(INF);pushup(root);
}void rotate(int &id,int d){int tmp=ch[id][d^1];ch[id][d^1]=ch[tmp][d];ch[tmp][d]=id;id=tmp;pushup(ch[id][d]);pushup(id);
}void insert(int &id,int v){if(!id){id=newno(v);return;}if(val[id]==v) {cnt[id]++;pushup(id);return;}int d=v<val[id]?0:1;insert(ch[id][d],v);if(dat[id]<dat[ch[id][d]]) rotate(id,d^1);pushup(id);
}void remove(int &id,int v){if(!id) return;if(v==val[id]){if(cnt[id]>1) {cnt[id]--;pushup(id);return;}if(ch[id][0]||ch[id][1]){if(!ch[id][1] || (ch[id][0] && dat[ch[id][0]] > dat[ch[id][1]])){rotate(id,1);remove(ch[id][1],v);}else{rotate(id,0);remove(ch[id][0],v);}pushup(id);}else id=0;return;}v<val[id]?remove(ch[id][0],v):remove(ch[id][1],v);pushup(id);
}int getrank(int id,int v){if(!id) return 1;if(val[id]==v) return size[ch[id][0]]+1;if(v<val[id]) return getrank(ch[id][0],v);else return size[ch[id][0]]+cnt[id]+getrank(ch[id][1],v);
}int getval(int id,int rank){if(!id) return INF;if(rank<=size[ch[id][0]]) return getval(ch[id][0],rank);else if(rank<=size[ch[id][0]]+cnt[id]) return val[id];else return getval(ch[id][1],rank-size[ch[id][0]]-cnt[id]);
}int getpre(int v){int id=root,pre=-INF;while(id){if(val[id]<v){pre=val[id];id=ch[id][1];}else id=ch[id][0];}return pre;
}int getnext(int v){int id=root,next=INF;while(id){if(val[id]>v){next=val[id];id=ch[id][0];}else id=ch[id][1];}return next;
}int main(){srand(time(0));build();int n;cin>>n;int op,x;while(n--){cin>>op>>x;if(op==1) insert(root,x);else if(op==2) remove(root,x);else if(op==3) cout<<getrank(root,x)-1<<endl;else if(op==4) cout<<getval(root,x+1)<<endl;else if(op==5) cout<<getpre(x)<<endl;else if(op==6) cout<<getnext(x)<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/921946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优秀交互设计网站四川seo推广

背景 AndroidStudio默认连接的是dl.google的gadle仓库。 每次重新build时: 下载速度慢;等待了半天总时build faild;build到一半connection timeout;即使使用了魔法也难以一次build好;这严重影响了我们的学习、开发效率。 当前网络上的使用国内镜像的教程不全 网上的教程…

Spring Boot版本1.5.7.RELEASE升级到2.5.14

Spring Boot版本1.5.7.RELEASE升级到2.5.14内置tomcat升级,从8.5.x升级到9.0.x flyway升级,从4.2.0升级到5.2.3,配置:flyway.enabled=true flyway.baselineOnMigrate=true flyway.locations=db.migration修改为: …

健康网站模版wordpress 导航调用

前言 我之前写过一篇文章&#xff0c;探究了zeroTier的最基础的玩法&#xff0c;那篇文章结尾我提到了使用zeroTier虽然实现组网了&#xff0c;但是我只能访问局域网中制定的设备&#xff0c;局域网中其他设备无法访问&#xff0c;这篇文章我又研究了一套方案openwrtzeroTier旁…

实现邮件发送

实现发送邮件的功能,可以在判定用户异地登录后发送邮件提醒或者使用邮件发送验证码的多种使用场景。 引入邮件依赖 <!--邮件发送依赖包--> <dependency><groupId>org.springframework.boot</gro…

AGC073C 赛后补题记录

感觉还是因为考场上没有用草稿纸,一直在原地思考。在草稿纸上多画画,可以拓展可能的入手点,更直观地刻画。 考虑将整棵树划分为若干个块,其中同一个块内每个点的选择方案都相同,对应的 \(x\) 也相同,并且每个块是…

LuatOS赋能Air780EPM:FTP通信开发教程正式上线!

随着物联网应用深入,远程文件传输需求日益增长。本教程聚焦LuatOS在Air780EPM平台上的FTP功能实现,提供详尽的代码示例与调试指导。 一、什么是 FTP 1.1 基本概念 FTP 协议 在 4G 物联网场景中,FTP 协议(File Tran…

深入解析:【深度学习计算机视觉】03:目标检测和边界框

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

DM40万用表为何全网爆火?!它有哪些与众不同?DM40万用表比肩千元级表,让您轻松实现专业级测量自由!

电子测量的“矛盾”与 DM40 的破局之道 在电子工程师的世界里,“矛盾” 始终存在:新手被传统万用表的多旋钮、多插孔搞得晕头转向,甚至因插错档位烧毁设备;资深工程师则要背着万用表、示波器、信号发生器 “三件套…

树形dp [POI 2013] LUK-Triumphal arch

波兰人神秘题目。 题意 \(n\) 点的树,初始节点 1 为黑色,其余白色。 两个人在博弈。 B 一开始位于 1 点,进行如下的回合。 首先每轮 A 选择 K 个点,然后 B 选择一个相邻的节点进行移动。 若任意时刻 B 位于白色的节…

【论术】t-design tree组件判断点击了角标还是label

用以精确校准是否点击了节点本身还是仅仅展开// 树的点击事件 const handleTreeClick = (params) => {const event = params.e;const labelElement = event.target.closest(".t-tree__label");// 判断是角…

Redis基础篇——集成客户端 - 实践

Redis基础篇——集成客户端 - 实践2025-09-29 15:29 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !impo…

leetCode刷题记录1

近来在反思自己的技能树,为找工作做准备。从大一的C语言、C++,到大二的Java、Python,甚至还没学的大三C#——编程语言学了一堆,但每一门都只够应付考试,没一个能算熟练掌握。技术框架也接触了不少,SpringBoot、V…

【Bluedroid】A2DP Source 音频流暂停流程解析[5]:停止流程及资源管理机制(btif_a2dp_source_stop_audio_req) - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

冷饮网站开发背景意义网页界面布局

https://www.processon.com/view/link/60b9cd711efad420f6d868a8

完整教程:分布式之抢购

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

k8s下部署kuboard

环境: OS:Centos 71.下载yaml文件[root@master kuboard]# cd /root/my_yaml/kuboard[root@master kuboard]# wget https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml2.部署[root@master kuboard]# cd /root/my_…

湘潭市哪里做网站大型网站开发价格

原文链接&#xff1a;http://blog.csdn.net/dev_csdn/article/details/78424803 ------------------------------------------------------------------- Docker是开发人员和系统管理员构建&#xff0c;发布和运行分布式应用程序的开放平台&#xff0c;可以在笔记本电脑、数据…

万象EXCEL开发(三)格式解读calcChain.xml——东方仙盟练气期 - 指南

万象EXCEL开发(三)格式解读calcChain.xml——东方仙盟练气期 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &quo…

网站建设与实现毕业答辩ppt免费素材图片下载

哈喽大家好&#xff0c;我是咸鱼 在文章《三剑客之 sed》中咸鱼向大家介绍了文本三剑客中的 sed sed 全名叫 stream editor&#xff0c;流编辑器&#xff0c;用程序的方式来编辑文本 那么今天咸鱼打算讲一下我在用 sed 原地替换文件时遇到的趣事 sed 让文件属性变了&#xff…

双创网站建设百度做的网站字体侵权吗

什么是类加载器&#xff1f; 类加载器&#xff1a;JVM只会运行二进制文件&#xff0c;类加载器的作用就是将字节码文件加载到JVM中&#xff0c;从而Java 程序能够启动起来。 类加载器有哪些&#xff1f; 启动类加载器(BootStrap ClassLoader):加载JAVA HOME/jre/lib目录下的库…