bzoj3224: Tyvj 1728 普通平衡树(打个splay暖暖手)

  (其实今天好热啊?

  题目大意:插入,删除,k小,前驱后继,数的排名。

  splay和treap裸题...过几天补个treap的

splay:

#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#define which(x) (son[fa[x]][1]==x)
using namespace std;
const int extar[2]={2147483647,-2147483647};
int fa[100010],count[100010],son[100010][3],val[100010],data[100010];
int root,x,y,n,tot,xiugai;
void read(int &k)
{k=0;int f=1;char c=getchar();while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();while(c<='9'&&c>='0')k=k*10+c-'0',c=getchar();k*=f;
}
void rotate(int x)
{int f=fa[x];bool k=which(x);son[f][k]=son[x][!k];son[x][!k]=f;son[fa[f]][which(f)]=x;if(son[f][k])fa[son[f][k]]=f;fa[x]=fa[f];fa[f]=x;count[x]=count[f];count[f]=count[son[f][0]]+count[son[f][1]]+val[f];
}
void splay(int x,int g)
{while(fa[x]!=g){int f=fa[x];if(fa[f]==g){rotate(x);break;}if(which(x)^which(f))rotate(x);else rotate(f);rotate(x);}if(!g)root=x;
}
int search(int x,int y)
{if(data[x]>y&&son[x][0])return search(son[x][0],y);if(data[x]<y&&son[x][1])return search(son[x][1],y);return x;
}
int ext(int x,int w)
{int k=search(x,extar[w]);splay(k,0);return data[k];
}
int pred(int w)
{int k=search(root,w);splay(k,0);if(data[k]<w)return data[k];return ext(son[k][0],0);
}
int succ(int x)
{int k=search(root,x);splay(k,0);if(data[k]>x)return data[k];return ext(son[k][1],1);
}
int rank(int x,int k)
{if(k<=count[son[x][0]])return rank(son[x][0],k);if(k<=(count[son[x][0]]+val[x]))return x;return rank(son[x][1],k-count[son[x][0]]-val[x]);
}
int findnum(int x)
{int k=search(root,x);splay(k,0);return count[son[k][0]]+1;
}
void insert(int &x,int w,int f)
{if(!x){x=++tot;count[x]=val[x]=1;data[x]=w;fa[x]=f;xiugai=tot;return;}if(data[x]==w)val[x]++,xiugai=x;if(data[x]<w)insert(son[x][1],w,x);if(data[x]>w)insert(son[x][0],w,x);count[x]++;
}
void del(int w)
{int k=search(root,w);splay(k,0);if(data[k]==w){if(val[k]>1)val[k]--,count[k]--;elseif(!son[k][0]){root=son[k][1];fa[root]=fa[k]=son[k][1]=count[k]=val[k]=data[k]=0;}else{fa[son[k][0]]=0;ext(son[k][0],0);son[root][1]=son[k][1];if(son[k][1])fa[son[k][1]]=root;count[root]+=count[son[k][1]];fa[k]=son[k][0]=son[k][1]=data[k]=val[k]=count[k]=0;}}
}
int main()
{read(n);for(int i=1;i<=n;i++){read(x);read(y);switch(x){case 1:insert(root,y,0);splay(xiugai,0);root=xiugai;break;case 2:del(y);break;case 3:printf("%d\n",findnum(y));break;case 4:printf("%d\n",data[rank(root,y)]);break;case 5:printf("%d\n",pred(y));break;case 6:printf("%d\n",succ(y));break;default:break;}}
}
View Code

 

转载于:https://www.cnblogs.com/Sakits/p/6838764.html

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

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

相关文章

手机相机自动识别语音提示

技术背景&#xff1a; 时下流行的手机拍照功能越来越多&#xff0c;在众多的手机拍照过程中&#xff0c;我们只在于手机拍照的效果和风景是否美好&#xff0c;甚至拿着手机自我狂拍&#xff0c;留下美好的记忆和回忆。 有时候根据手机相机的已有技术功能随便一设置就能拍到理想…

c# Invoke和BeginInvoke 区别

转自http://www.cnblogs.com/c2303191/articles/826571.html Control的Invoke和BeginInvoke是相对于支线线程&#xff08;因为一般在支线线程中调用&#xff0c;用来更新主线程ui&#xff09;Invoke立即插入主线程中执行&#xff0c;而BeginInvoke 要等主线程结束才执行 近日&a…

04 Springboot 格式化LocalDateTime

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

DNN使用非80端口和总是跳转到http://localhost问题的解决

2019独角兽企业重金招聘Python工程师标准>>> 我试图在一台服务器上安装一个DNN网站时&#xff0c;遇到了一些问题。问题一&#xff1a;遇到的第一个问题就是网站总是自动导向到localhost。不管我怎么试&#xff0c;只要我输入http://domain.com/dnn&#xff0c;总是…

解决解决鼠标右键被锁定

现象&#xff1a;我的电脑不知道为什么鼠标右键被锁定了&#xff0c;用不了。请问如何解决&#xff1f;可能是有人在你的注册表中做了手脚&#xff0c;锁定了右键菜单。打开注册表编辑器&#xff0c;选择以下子键&#xff1a;“HKEY_CURRENT_USER\Software\Microsoft\Windows\C…

Jmter操作数据库

1、导入jdbc的jar包&#xff0c;因为jmeter本身不能直接连接mysql&#xff0c;所以需要导入第三方的jar包&#xff0c;来连接mysql&#xff0c;如下操作&#xff1a;2、创建数据库连接如下&#xff1a; 3、配置mysql的url、端口号、账号、密码注意上面的Database URL&#xff1…

通过telnet连接查看memcache服务器

memcache作为一款优秀的进程外缓存&#xff0c;常常被运用于高并发系统架构中。这里主要谈谈怎么通过telnet工具&#xff0c;查看memcache运行状况并对其key进行管理维护。假设memcache安装目录&#xff1a;/usr/local/memcached 1、启动memcache [plain] view plaincopy [root…

Ubuntu的一些软件源

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

ComponentOne FlexGrid for WinForms 中文版快速入门(9)—过滤

C1FlexGrid过滤 表格中的数据过滤通常有两种形式&#xff1a; 基于表头&#xff1a;过滤器的图标出现在有一个过滤器适用于它的每一列。用户可以通过点击过滤器的图标来查看和编辑过滤器。这是Windows 7或Vista或C1FlexGrid控件使用的机制。这种类型的过滤器的主要优点是&…

Pycharm搜索导航之文件名、符号名搜索

1、准备一个工程 向你的工程中添加一个Python文件&#xff0c;并输入一些源码&#xff0c;例如&#xff1a; 2、转到对应文件、类、符号 Pycharm提供的一个很强力的功能就是能够根据名称跳转到任何文件、类、符号所在定义位置。 3、跳转到文件 按下CtrlShiftN快捷键&#xff0c…

asp.net6 blazor 文件上传

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

分享网页设计当中使用进度条打造精美界面最佳例子

进度条是用户界面的重要组成部分&#xff0c;他向用户显示当前的下载进度&#xff0c;一个小的圆形因素使得界面不是更方便也更容易理解让我们举个例子&#xff0c;想象你去一个网站&#xff0c;你需要下载视频&#xff0c;你选择一个文件&#xff0c;按下"下载"按钮…

选项卡的制作和注意要点

说到选项卡。一開始我还真有点搞不懂怎么弄出来的&#xff0c;但一想事实上也比复杂啊。无非就是把事件和事件的范围给控制好即可了。第一事件&#xff1a;事件就两个&#xff0c;鼠标放上去还有鼠标离开&#xff0c;即放上显示。离开隐藏。 第二事件的范围&#xff1a; 这是关…

基于SqlSugar的开发框架循序渐进介绍(5)-- 在服务层使用接口注入方式实现IOC控制反转

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

Synergy如果timeout的可能原因

在使用Synergy的过程中&#xff0c;如果你确认你的server端和client端设置都正确&#xff0c;但是start之后client端一直显示超时&#xff0c;那么可能的一个原因是你的server和client不在同一个网段&#xff0c;比如一个直接是接的网线&#xff0c;一个用的是wifi&#xff0c;…

未将对象引用设置到对象的实例--可能出现的问题总结

一、网络上的一般说法 1、ViewState 对象为Null。2、DateSet 空。3、sql语句或Datebase的原因导致DataReader空。4、声明字符串变量时未赋空值就应用变量。5、未用new初始化对象。6、Session对象为空。7、对控件赋文本值时,值不存在。8、使用Request.QueryString()时,所获取的对…

最长回文子串 C++

在一个字符串中要到最长的回文子串&#xff0c;有如下方案&#xff0c;代码在最后。 最长回文子串的相关博文 1、暴力法 最容易想到的就是暴力破解&#xff0c;求出每一个子串&#xff0c;之后判断是不是回文&#xff0c;找到最长的那个。 求每一个子串时间复杂度O(N^2)&#x…

软件项目管理 3.5.敏捷生存期模型

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

altiumer designer学习

1.s快捷键&#xff0c;是进行多样的选择。 2.ctrls,是参看其中的一层。 3.选中器件后&#xff0c;右键点击选择align->position component text,可以选择desingator或者comment&#xff0c;有N种位置可以选择&#xff0c;这样器件的标注就统一在某一位置了. 4.转载于:https:…

烈焰SWF解密

SWF 解密 是用UE编辑器 改 SWF开头 的AA AA AA &#xff0c;改成43 57 53 就解密了