输入

第1行:1个正整数n,表示操作数量,100≤n≤200,000
第2..n+1行:可能包含下面3种规则:
1个字母'I',紧接着1个数字k,表示插入一个数字k到树中,1≤k≤1,000,000,000,保证每个k都不相同
1个字母'Q',紧接着1个数字k。表示询问树中不超过k的最大数字
1个字母'D',紧接着2个数字a,b,表示删除树中在区间[a,b]的数。

输出

若干行:每行1个整数,表示针对询问的回答,保证一定有合法的解

样例输入

6 I 1 I 2 I 3 Q 4 D 2 2 Q 2

样例输出

3 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]的更多相关文章

  1. splay模版

    //splay模版 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstrin ...

  2. [bzoj1269][AHOI2006文本编辑器editor] (splay模版题 or pb_ds [rope]大法)

    Description 这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器.你能帮助他吗?为了明确任务目标,可可对“文本编辑器”做了一个抽象的定义:   文本:由0个或 ...

  3. _bzoj3224 Tyvj 1728 普通平衡树【Splay】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3224 保存splay模版 一刻不停写了一个小时多一点,幸好一遍过了!(其实带着freopen ...

  4. tyvj 1729 文艺平衡树

    文艺平衡树 From admin 背景 Background 此为平衡树系列第二道:文艺平衡树 描述 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以 ...

  5. bzoj3223 文艺平衡树 codevs3303 翻转区间

    splay模版题吧 只有区间翻转 至于为什么要把须翻转区间旋到根 因为查找一个区间可以先找出他左端点左边第一个点和右端点x右边第一个点y 然后将x旋到根节点 y旋到x的右儿子 这样x的右边的点就是所有 ...

  6. ZJOI2006书架

    追yql做题记录的时候做到的……一道Splay模版题…… 啊LCT写久了都有点忘了Splay了(什么奇怪的逻辑?) 其实说白了五个操作: 1. 将某元素置顶:将元素旋到根,然后将左子树合并到该元素的后 ...

  7. 1439. Battle with You-Know-Who(splay树)

    1439 路漫漫其修远兮~ 手抄一枚splay树 长长的模版.. 关于spaly树的讲解   网上很多随手贴一篇 貌似这题可以用什么bst啦 堆啦 平衡树啦 等等 这些本质都是有共同点的 查找.删除特 ...

  8. BZOJ3224普通平衡树【Splay】

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 11751  Solved: 5013 Descriptio ...

  9. Luogu1486郁闷的出纳员【Splay】

    P1486 郁闷的出纳员 题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反 ...

随机推荐

  1. ASP.NET Core MVC 源码学习:Routing 路由

    前言 最近打算抽时间看一下 ASP.NET Core MVC 的源码,特此把自己学习到的内容记录下来,也算是做个笔记吧. 路由作为 MVC 的基本部分,所以在学习 MVC 的其他源码之前还是先学习一下 ...

  2. Docker 跟 NodeJs 最佳实践

    Level-1 简单实现 需求:简单的构建一个app应用并且用docker部署.Dockerfile编写为: FROM node:7.3.0 RUN mkdir -p /usr/src/app COP ...

  3. yii中调整ActiveForm表单样式

    Yii2中对于表单和字段的支持组件为ActiveForm和ActiveField, <?php $form = ActiveForm::begin([ 'id' => 'login-for ...

  4. [转载]或许您还不知道的八款Android开源游戏引擎

    或许您还不知道的八款Android开源游戏引擎         分类:             技术文章              2010-08-04 20:27     17430人阅读     ...

  5. (转)python中的*args和**kw到底是个啥。看下面的例子就会懂了

    先来看个例子: def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs print '----------- ...

  6. Docx组件读写Word文档介绍

    Docx介绍 官方原文:DocX is a .NET library that allows developers to manipulate Word 2007/2010/2013 files, i ...

  7. react+webpack开发环境配置

    react是目前非常热门的前端框架,提倡组件化开发.所谓的组件,简单理解,就是一个独立的页面部件(包括页面模版,样式,逻辑等),它是一个独立的整体. webpack,是一个模块打包工具,其主要功能,就 ...

  8. java学习常遇问题及解决方案

    eclipse中的项目运行时不出现run as→java application选项? 解决方案☞必须有正确的主方法,即public static void main(String[]args){}

  9. 【Hexo】Hexo+Github构建个人博客 (三):添加皮肤主题

    一.选择主题 选择你自己喜欢的主题 参考: 1.Hexo官网主题 2.知乎:有哪些好看的 Hexo 主题? 二.配置主题 1.我选择了hexo-theme-yilia这个主题,简洁大方,功能齐全: 这 ...

  10. 各位Coder看过来

    为了丰富博客内容,也为了解决一些实际的问题,现准备出一系列博文,内容为各位回复评论指明需要的知识点,将在近期为你解决并提供还算精要的讲解:评论内容要求 Coder:+需要的技术内容.技术内容不限领域, ...