输入

第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大的数

细节在代码中:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstdlib>
  5. #include<cmath>
  6. #include<cstring>
  7. #include<ctime>
  8. using namespace std;
  9. const int N=,INF=;
  10. struct node
  11. {
  12. node *child[],*fa;
  13. int x;
  14. }a[N];
  15. node *pos=a,*root;
  16. void newnode(node *&r,int key,node *&fa)
  17. {
  18. r=pos++;
  19. r->child[]=r->child[]=NULL;
  20. r->x=key;r->fa=fa;
  21. }
  22.  
  23. void insert(node *&r,int key,node *fa)
  24. {
  25. if(r==NULL){
  26. newnode(r,key,fa);
  27. return ;
  28. }
  29. insert(r->child[key>r->x],key,r);
  30. }
  31. node *pre,*nxt;
  32. void rotate(node *&r,bool t)//0left 1right
  33. {
  34. node *y=r->fa;
  35. y->child[!t]=r->child[t];
  36. if(r->child[t])r->child[t]->fa=y;
  37. if(y->fa)y->fa->child[y->fa->child[]==y]=r;
  38. r->fa=y->fa;
  39. r->child[t]=y;
  40. y->fa=r;
  41. }
  42. void check(node *r)//输出整个SPLAY
  43. {
  44. if(r==NULL)return ;
  45. printf("x=%d lchild=%d rchild=%d\n",r->x,(r->child[]==NULL?NULL:r->child[]->x),r->child[]==NULL?NULL:r->child[]->x);
  46. check(r->child[]);
  47. check(r->child[]);
  48. }
  49. void getpre(node *r,int key)
  50. {
  51. if(r==NULL)return ;
  52. if(key<=r->x)getpre(r->child[],key);
  53. else pre=r,getpre(r->child[],key);
  54. }
  55. void getnext(node *r,int key)
  56. {
  57. if(r==NULL)return ;
  58. if(key>=r->x)getnext(r->child[],key);
  59. else nxt=r,getnext(r->child[],key);
  60. }
  61. void getans(node *r,int key)
  62. {
  63. if(r==NULL)return ;
  64. if(key<r->x)getans(r->child[],key);//注意这里key<r->x不能取等
  65. else pre=r,getans(r->child[],key);
  66. }
  67. void splay(node *r,node *g)
  68. {
  69. while(r->fa!=g)
  70. {
  71. if(r->fa->fa==g)rotate(r,r->fa->child[]==r);
  72. else{
  73. node *y=r->fa;
  74. bool b=y->fa->child[]==y;
  75. if(y->child[b]==r)rotate(r,!b);
  76. else rotate(y,b);
  77. rotate(r,b);
  78. }
  79. }
  80. if(g==NULL)root=r;
  81. }
  82.  
  83. void work(int l,int r)
  84. {
  85. getpre(root,l);getnext(root,r);
  86. splay(pre,NULL);
  87. splay(nxt,pre);
  88. root->child[]->child[]=NULL;
  89. }
  90. void haha()//**********插入INF 和 -INF 避免找不到小于l和大于r的数*************
  91. {
  92. insert(root,INF,NULL);insert(root,-INF,NULL);
  93. return ;
  94. }
  95. int main()
  96. {
  97. haha();
  98. int n,x,y;char ch;
  99. scanf("%d",&n);
  100. while(n--)
  101. {
  102. scanf("\n%c%d",&ch,&x);
  103. if(ch=='I'){
  104. insert(root,x,NULL);
  105. }
  106. if(ch=='Q'){
  107. getans(root,x);
  108. printf("%d\n",pre->x);
  109. }
  110. if(ch=='D'){
  111. scanf("%d",&y);
  112. work(x,y);
  113. }
  114. }
  115. }

[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. JNDI常见配置方式

    JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务将名称和对象联系起来,使得我们可以用 ...

  2. 10分钟精通SharePoint-搜索

    大势所趋随着企业内容和文档数量的骤增,快速定位到所需材料和内容已经迫不及待,这也是所有企业所面临的共同的挑战,应这个大的趋势,"搜索"闪亮登上了企业协作(SharePoint)舞台 ...

  3. 在Chrome中安装PostMan用来测试SpringBoot程序

    1. 首先下载一个PostMan的插件,Postman_v4.1.3.crx 下载下来为这种类型的文件. 2. 在Chrome中输入chrome://extensions/ 这个,打开Chrome的扩 ...

  4. 会话管理(Cookie/Session技术)

    什么是会话:用户打开浏览器,点击多个超链接,访问服务器的多个web资源,然后关闭浏览器,整个过程就称为一个会话: 会话过程需要解决的问题:每个用户在使用浏览器与服务器进行会话的过程中,都可能会产生一些 ...

  5. 在线上服务器上无管理员权限下升级NodeJS版本

    前言 最近发现一个线上机器的问题,是因为node版本过低导致的,线上机器的node版本还是0.x版,遂打算升级node版本. 但是发现常规的npm包的n模块无法使用,提示没有权限创建文件夹,导致nod ...

  6. Mybatis 中一对多,多对一的配置

    现在有很多电商平台,就拿这个来说吧.顾客跟订单的关系,一个顾客可以有多张订单,但是一个订单只能对应一个顾客. 一对多的顾客 <?xml version="1.0" encod ...

  7. GCM(Google Cloud Messaging)推送完全解析

    应该是目前为止全网最详细的GCM推送解析. GCM官方解释: https://developers.google.cn/cloud-messaging/?hl=zh-cn Send data from ...

  8. POPTEST老李谈钩子

    poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-845052 ...

  9. [android] 手机卫士黑名单功能(ListView结合SQLite增删改)

    修改界面,在顶部横条上增加一个添加按钮,点击打开一个自定义对话框,输入电话号码和拦截模式保存到数据库 自定义对话框看这篇http://www.cnblogs.com/taoshihan/p/53703 ...

  10. 如何在多个项目中分离Asp.Net Core Mvc的Controller和Areas

    前言 软件系统中总是希望做到松耦合,项目的组织形式也是一样,本篇文章将介绍在ASP.NET CORE MVC中怎么样将Controller与主网站项目进行分离,并且对Areas进行支持. 实践 1.新 ...