[Splay模版1]
输入
输出
若干行:每行1个整数,表示针对询问的回答,保证一定有合法的解
样例输入
样例输出
Splay模版
注意在平衡树中要加入INF 和 -INF 避免找不到比L小的数和比R大的数
细节在代码中:
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<cstdlib>
- #include<cmath>
- #include<cstring>
- #include<ctime>
- using namespace std;
- const int N=,INF=;
- struct node
- {
- node *child[],*fa;
- int x;
- }a[N];
- node *pos=a,*root;
- void newnode(node *&r,int key,node *&fa)
- {
- r=pos++;
- r->child[]=r->child[]=NULL;
- r->x=key;r->fa=fa;
- }
- void insert(node *&r,int key,node *fa)
- {
- if(r==NULL){
- newnode(r,key,fa);
- return ;
- }
- insert(r->child[key>r->x],key,r);
- }
- node *pre,*nxt;
- void rotate(node *&r,bool t)//0left 1right
- {
- node *y=r->fa;
- y->child[!t]=r->child[t];
- if(r->child[t])r->child[t]->fa=y;
- if(y->fa)y->fa->child[y->fa->child[]==y]=r;
- r->fa=y->fa;
- r->child[t]=y;
- y->fa=r;
- }
- void check(node *r)//输出整个SPLAY
- {
- if(r==NULL)return ;
- printf("x=%d lchild=%d rchild=%d\n",r->x,(r->child[]==NULL?NULL:r->child[]->x),r->child[]==NULL?NULL:r->child[]->x);
- check(r->child[]);
- check(r->child[]);
- }
- void getpre(node *r,int key)
- {
- if(r==NULL)return ;
- if(key<=r->x)getpre(r->child[],key);
- else pre=r,getpre(r->child[],key);
- }
- void getnext(node *r,int key)
- {
- if(r==NULL)return ;
- if(key>=r->x)getnext(r->child[],key);
- else nxt=r,getnext(r->child[],key);
- }
- void getans(node *r,int key)
- {
- if(r==NULL)return ;
- if(key<r->x)getans(r->child[],key);//注意这里key<r->x不能取等
- else pre=r,getans(r->child[],key);
- }
- void splay(node *r,node *g)
- {
- while(r->fa!=g)
- {
- if(r->fa->fa==g)rotate(r,r->fa->child[]==r);
- else{
- node *y=r->fa;
- bool b=y->fa->child[]==y;
- if(y->child[b]==r)rotate(r,!b);
- else rotate(y,b);
- rotate(r,b);
- }
- }
- if(g==NULL)root=r;
- }
- void work(int l,int r)
- {
- getpre(root,l);getnext(root,r);
- splay(pre,NULL);
- splay(nxt,pre);
- root->child[]->child[]=NULL;
- }
- void haha()//**********插入INF 和 -INF 避免找不到小于l和大于r的数*************
- {
- insert(root,INF,NULL);insert(root,-INF,NULL);
- return ;
- }
- int main()
- {
- haha();
- int n,x,y;char ch;
- scanf("%d",&n);
- while(n--)
- {
- scanf("\n%c%d",&ch,&x);
- if(ch=='I'){
- insert(root,x,NULL);
- }
- if(ch=='Q'){
- getans(root,x);
- printf("%d\n",pre->x);
- }
- if(ch=='D'){
- scanf("%d",&y);
- work(x,y);
- }
- }
- }
[Splay模版1]的更多相关文章
- splay模版
//splay模版 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstrin ...
- [bzoj1269][AHOI2006文本编辑器editor] (splay模版题 or pb_ds [rope]大法)
Description 这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器.你能帮助他吗?为了明确任务目标,可可对“文本编辑器”做了一个抽象的定义: 文本:由0个或 ...
- _bzoj3224 Tyvj 1728 普通平衡树【Splay】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3224 保存splay模版 一刻不停写了一个小时多一点,幸好一遍过了!(其实带着freopen ...
- tyvj 1729 文艺平衡树
文艺平衡树 From admin 背景 Background 此为平衡树系列第二道:文艺平衡树 描述 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以 ...
- bzoj3223 文艺平衡树 codevs3303 翻转区间
splay模版题吧 只有区间翻转 至于为什么要把须翻转区间旋到根 因为查找一个区间可以先找出他左端点左边第一个点和右端点x右边第一个点y 然后将x旋到根节点 y旋到x的右儿子 这样x的右边的点就是所有 ...
- ZJOI2006书架
追yql做题记录的时候做到的……一道Splay模版题…… 啊LCT写久了都有点忘了Splay了(什么奇怪的逻辑?) 其实说白了五个操作: 1. 将某元素置顶:将元素旋到根,然后将左子树合并到该元素的后 ...
- 1439. Battle with You-Know-Who(splay树)
1439 路漫漫其修远兮~ 手抄一枚splay树 长长的模版.. 关于spaly树的讲解 网上很多随手贴一篇 貌似这题可以用什么bst啦 堆啦 平衡树啦 等等 这些本质都是有共同点的 查找.删除特 ...
- BZOJ3224普通平衡树【Splay】
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 11751 Solved: 5013 Descriptio ...
- Luogu1486郁闷的出纳员【Splay】
P1486 郁闷的出纳员 题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反 ...
随机推荐
- JNDI常见配置方式
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务将名称和对象联系起来,使得我们可以用 ...
- 10分钟精通SharePoint-搜索
大势所趋随着企业内容和文档数量的骤增,快速定位到所需材料和内容已经迫不及待,这也是所有企业所面临的共同的挑战,应这个大的趋势,"搜索"闪亮登上了企业协作(SharePoint)舞台 ...
- 在Chrome中安装PostMan用来测试SpringBoot程序
1. 首先下载一个PostMan的插件,Postman_v4.1.3.crx 下载下来为这种类型的文件. 2. 在Chrome中输入chrome://extensions/ 这个,打开Chrome的扩 ...
- 会话管理(Cookie/Session技术)
什么是会话:用户打开浏览器,点击多个超链接,访问服务器的多个web资源,然后关闭浏览器,整个过程就称为一个会话: 会话过程需要解决的问题:每个用户在使用浏览器与服务器进行会话的过程中,都可能会产生一些 ...
- 在线上服务器上无管理员权限下升级NodeJS版本
前言 最近发现一个线上机器的问题,是因为node版本过低导致的,线上机器的node版本还是0.x版,遂打算升级node版本. 但是发现常规的npm包的n模块无法使用,提示没有权限创建文件夹,导致nod ...
- Mybatis 中一对多,多对一的配置
现在有很多电商平台,就拿这个来说吧.顾客跟订单的关系,一个顾客可以有多张订单,但是一个订单只能对应一个顾客. 一对多的顾客 <?xml version="1.0" encod ...
- GCM(Google Cloud Messaging)推送完全解析
应该是目前为止全网最详细的GCM推送解析. GCM官方解释: https://developers.google.cn/cloud-messaging/?hl=zh-cn Send data from ...
- POPTEST老李谈钩子
poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-845052 ...
- [android] 手机卫士黑名单功能(ListView结合SQLite增删改)
修改界面,在顶部横条上增加一个添加按钮,点击打开一个自定义对话框,输入电话号码和拦截模式保存到数据库 自定义对话框看这篇http://www.cnblogs.com/taoshihan/p/53703 ...
- 如何在多个项目中分离Asp.Net Core Mvc的Controller和Areas
前言 软件系统中总是希望做到松耦合,项目的组织形式也是一样,本篇文章将介绍在ASP.NET CORE MVC中怎么样将Controller与主网站项目进行分离,并且对Areas进行支持. 实践 1.新 ...