P3369-[模板]普通平衡树【有旋Treap】

正题

评测记录:https://www.luogu.org/recordnew/lists?uid=SSL_WYC_zombieeeeee&pid=P3369&status=&sort=0


题目大意

要求支持查询一个数字的排名,查询该排名的数字,插入数字,删除数字,求前驱后继。


解题思路

有旋Treap不解释。


codecodecode

#include<cstdio>
#include<algorithm>
#define INF 2147483647/3
#define N 100010
using namespace std;
int n,root;
struct Treap_node{int l[N],r[N];int val[N],dat[N];int cnt[N],size[N];int tot;int New(int new_val){val[++tot]=new_val;dat[tot]=rand();cnt[tot]=size[tot]=1;return tot;}void Updata(int p){size[p]=size[l[p]]+size[r[p]]+cnt[p];}void Build(){New(-INF);New(INF);root=1;r[1]=2;Updata(root);}int GetRankByVal(int p,int num){if(p==0) return 0;if(num==val[p]) return size[l[p]]+1;if(num<val[p]) return GetRankByVal(l[p],num);return GetRankByVal(r[p],num)+size[l[p]]+cnt[p];}int GetValByRank(int p,int rank){if (p==0) return INF;if(size[l[p]]>=rank) return GetValByRank(l[p],rank);if(size[l[p]]+cnt[p]>=rank) return val[p];return GetValByRank(r[p],rank-size[l[p]]-cnt[p]);}void zig(int &p){int q=l[p];l[p]=r[q];r[q]=p;p=q;Updata(r[p]);Updata(p);}void zag(int &p){int q=r[p];r[p]=l[q];l[q]=p;p=q;Updata(l[p]);Updata(p);}void Insert(int &p,int num){if(p==0){p=New(num);return;}if(num==val[p]){cnt[p]++;Updata(p);return;}if(num<val[p]){Insert(l[p],num);if(dat[p]<dat[l[p]]) zig(p);}else{Insert(r[p],num);if(dat[p]<dat[r[p]]) zag(p);}Updata(p);}int GetPre(int num){int ans=1;int p=root;while(p){if(num==val[p]){if(l[p]>0){p=l[p];while(r[p]>0) p=r[p];ans=p;}break;}if(val[p]<num&&val[p]>val[ans]) ans=p;p=num<val[p]?l[p]:r[p];}return val[ans];}int GetNext(int num){int ans=2;int p=root;while(p){if(num==val[p]){if(r[p]>0){p=r[p];while(l[p]>0) p=l[p];ans=p;}break;}if(val[p]>num&&val[p]<val[ans]) ans=p;p=num<val[p]?l[p]:r[p];}return val[ans];}void Remove(int &p,int num){if(p==0) return;if(num==val[p]){if(cnt[p]>1){cnt[p]--;Updata(p);return;}if(l[p]||r[p]){if(r[p]==0||dat[l[p]]>dat[r[p]])zig(p),Remove(r[p],num);elsezag(p),Remove(l[p],num);Updata(p);}else p=0;return;}num<val[p]?Remove(l[p],num):Remove(r[p],num);Updata(p);}
}a;
int main()
{a.Build();scanf("%d",&n);while(n--){int opt,x;scanf("%d%d",&opt,&x);switch(opt){case 1:a.Insert(root,x);break;case 2:a.Remove(root,x);break;case 3:printf("%d\n",a.GetRankByVal(root,x)-1);break;case 4:printf("%d\n",a.GetValByRank(root,x+1));break;case 5:printf("%d\n",a.GetPre(x));break;case 6:printf("%d\n",a.GetNext(x));break;}}
}

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

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

相关文章

ASP.NET Core中的OWASP Top 10 十大风险-SQL注入

本博文翻译自&#xff1a; https://dotnetcoretutorials.com/2017/10/11/owasp-top-10-asp-net-core-sql-injection/ OWASP或者说是开放Web应用程序安全项目&#xff0c;这是一个非营利性的组织&#xff0c;其目的是促进安全的web应用程序的开发和设计。当他们在世界各地举办不…

C++描述杭电OJ 2023.求平均成绩 ||

C描述杭电OJ 2023.求平均成绩 || Problem Description 假设一个班有n(n<50)个学生&#xff0c;每人考m(m<5)门课&#xff0c;求每个学生的平均成绩和每门课的平均成绩&#xff0c;并输出各科成绩均大于等于平均成绩的学生数量。 Input 输入数据有多个测试实例&#x…

adb操作

adb下载安装 链接&#xff1a;https://pan.baidu.com/s/1Tg_q7Q5wS-0-y_3KuZL-dQ 提取码&#xff1a;599i 检验是否连接到手机 adb devices 检测是否自己的手机 adb shell wm size 无线连接: 先开启usb连接调试 连接手机ip adb connect 192.168.1.5 连接成功后可拔掉usb继续测…

P3369-[模板]普通平衡树【替罪羊树】

正题 评测记录:https://www.luogu.org/recordnew/lists?uidSSL_WYC_zombieeeeee&pidP3369&status&sort0 题目大意 要求支持查询一个数字的排名&#xff0c;查询该排名的数字&#xff0c;插入数字&#xff0c;删除数字&#xff0c;求前驱后继。 解题思路 替罪羊…

萨提亚领衔主题演讲,带领高管和MVP合影,预告Julia女神的演讲中将有我的.NET Core实践

微软Tech Summit 2017大会在精彩的暖场视频中劲爆开始&#xff0c;瞬间点燃参会者们的热情。予力全球每一人、每一组织&#xff0c;成就不凡&#xff0c;是微软的使命。 微软公司首席执行官萨提亚 ∙ 纳德拉发布了主题演讲&#xff0c;他表示&#xff1a;“稳定发展、持续创新…

C++描述杭电OJ 2015.偶数求和 ||

C描述杭电OJ 2015.偶数求和 || Problem Description 有一个长度为n(n<100)的数列&#xff0c;该数列定义为从2开始的递增有序偶数&#xff0c;现在要求你按照顺序每m个数求出一个平均值&#xff0c;如果最后不足m个&#xff0c;则以实际数量求平均值。编程输出该平均值序列…

Zookeeper一致性协议原理Zab

转载自 Zookeeper一致性协议原理Zab ZooKeeper为高可用的一致性协调框架&#xff0c;自然的ZooKeeper也有着一致性算法的实现&#xff0c;ZooKeeper使用的是ZAB协议作为数据一致性的算法&#xff0c; ZAB&#xff08;ZooKeeper Atomic Broadcast &#xff09; 全称为&#xf…

ajax读取文件未及时更新

在ajax读取文件&#xff08;.txt,.json&#xff09;时&#xff0c;会发生更改文件&#xff0c;ajax读取的还是原来的文件&#xff0c;要想改变这个可以在读取文件的后缀在加个&#xff1f;tXXX 具体情况如下 这样由于t值在变化&#xff0c;浏览器就会认为是个变化的值&#x…

P3369-[模板]普通平衡树【Splay】

正题 评测记录:https://www.luogu.org/recordnew/lists?uidSSL_WYC_zombieeeeee&pidP3369&status&sort0 题目大意 要求支持查询一个数字的排名&#xff0c;查询该排名的数字&#xff0c;插入数字&#xff0c;删除数字&#xff0c;求前驱后继。 解题思路 Splay不…

基于.NET CORE微服务框架 -浅析如何使用surging

1、前言 surging受到大家这么强烈的关注&#xff0c;我感到非常意外&#xff0c;比如有同僚在公司的分享会上分享surging, 还有在博客拿其它的RPC框架&#xff0c;微服务做对比等等&#xff0c;这些举动都让我感觉压力很大&#xff0c;毕竟作为个人的开源项目&#xff0c;无法与…

C++描述杭电OJ 2016.数据的交换输出 ||

C描述杭电OJ 2016.数据的交换输出 || Problem Description 输入n(n<100)个数&#xff0c;找出其中最小的数&#xff0c;将它与最前面的数交换后输出这些数。 Input 输入数据有多组&#xff0c;每组占一行&#xff0c;每行的开始是一个整数n&#xff0c;表示这个测试实例的…

2019年这50个Kafka面试题,你知道答案么

转载自 2019年这50个Kafka面试题&#xff0c;你知道答案么 Apache Kafka对于新手的面试问题&#xff1a;41, 42, 43, 44, 45, 47, 49 Apache Kafka对于有经验的人的面试问题&#xff1a;46, 48 Apache Kafka的受欢迎程度很高&#xff0c;Kafka拥有充足的就业机会和职业前景…

聊天系统

显示所有的信息 chat.html <!DOCTYPE html><html> <head> <meta charset"UTF-8"><title></title><style>#button1{background:skyblue;border-radius:20px;width:100px;}</style><script>function showmess…

jzoj3058-火炬手【高精度,暴力】

正题 题目大意 对于一个nnn&#xff0c;求一个mmm&#xff0c;使得n∗mn*mn∗m只有0或1 解题思路 暴力枚举n∗mn*mn∗m&#xff0c;然后高精度求答案。 codecodecode #include<cstdio> #include<cmath> #define ll long long using namespace std; ll n,xans; i…

使用Visual Studio Code 开发.NET Core应用程序

开源和跨平台开发是Microsoft 的当前和将来至关重要的策略。.NET Core已开源&#xff0c;同时开发了其他项来使用和支持新的跨平台策略。.NET Core2.0 目前已经发布&#xff0c;是适用于针对 Web 和云构建跨平台应用程序的最新开源技术&#xff0c;可在 Linux、Mac OS X 和Wind…

C++描述杭电OJ 2018.母牛的故事 ||

C描述杭电OJ 2018.母牛的故事 || Problem Description 有一头母牛&#xff0c;它每年年初生一头小母牛。每头小母牛从第四个年头开始&#xff0c;每年年初也生一头小母牛。请编程实现在第n年的时候&#xff0c;共有多少头母牛&#xff1f; Input 输入数据由多个测试实例组成…

Kafka面试题与答案全套整理

转载自 Kafka面试题与答案全套整理 1. Kafka的用途有哪些&#xff1f;使用场景如何&#xff1f; 总结下来就几个字:异步处理、日常系统解耦、削峰、提速、广播 如果再说具体一点例如:消息,网站活动追踪,监测指标,日志聚合,流处理,事件采集,提交日志等 2. Kafka中的ISR、AR又…

jzoj3059-雕塑【容斥,数论】

正题 题目大意 n∗nn*nn∗n的矩阵&#xff0c;要求放nnn个雕塑&#xff0c;要求每行每列都只有一个雕塑&#xff0c;且不可以放在障碍物上。求方案总数。 解题思路 首先没有障碍物答案就是n!n!n!。 之后障碍物很少&#xff0c;考虑容斥。 设fif_ifi​为选iii个障碍物且这些障…

Julia女神告诉我任何一家企业本质上都是一家软件公司

微软技术大会今天进入高潮&#xff0c;潘正磊女神发表题为“开发者在数字化转型中的关键价值”的主题演讲&#xff0c;积极评价开发者在各行业数字化转型中扮演的关键角色&#xff1b; 女神潘正磊表示&#xff1a;“由技术创新引领的数字化转型给全球各行业带来了巨大的变革和机…

C++描述杭电OJ 2020.绝对值排序 ||

C描述杭电OJ 2020.绝对值排序 || Problem Description 输入n(n<100)个整数&#xff0c;按照绝对值从大到小排序后输出。题目保证对于每一个测试实例&#xff0c;所有的数的绝对值都不相等。 Input 输入数据有多组&#xff0c;每组占一行&#xff0c;每行的第一个数字为n…