单点插入删除以及求前缀
  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. using namespace std;
  5. const int M=,inf=;
  6. int read(){
  7. int ans=,f=,c=getchar();
  8. while(c<''||c>''){if(c=='-') f=-; c=getchar();}
  9. while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
  10. return ans*f;
  11. }
  12. int n,m,root;
  13. int c[M][],size[M],fa[M],v[M],pos[M];
  14. void up(int k){size[k]=size[c[k][]]+size[c[k][]]+;}
  15. void rotate(int x,int& k){
  16. int y=fa[x],z=fa[y],l=,r=;
  17. if(c[y][]==x) l=,r=;
  18. if(y==k) k=x;
  19. else{if(c[z][]==y) c[z][]=x; else c[z][]=x;}
  20. fa[y]=x; fa[x]=z; fa[c[x][r]]=y;
  21. c[y][l]=c[x][r]; c[x][r]=y;
  22. up(y); up(x);
  23. }
  24. void splay(int x,int& k){
  25. while(x!=k){
  26. int y=fa[x],z=fa[y];
  27. if(y!=k){
  28. if(c[z][]==y^c[y][]==x) rotate(y,k);
  29. else rotate(x,k);
  30. }
  31. rotate(x,k);
  32. }
  33. }
  34. int find(int x,int rank){
  35. int l=c[x][],r=c[x][];
  36. if(size[l]+==rank) return x;
  37. else if(size[l]>=rank) return find(l,rank);
  38. else return find(r,rank-size[l]-);
  39. }
  40. int build(int l,int r){
  41. if(l>r) return ;
  42. int m=(l+r)>>;
  43. c[m][]=build(l,m-);
  44. c[m][]=build(m+,r);
  45. for(int i=;i<;i++) if(c[m][i]) fa[c[m][i]]=m;
  46. up(m); return m;
  47. }
  48. void del(int k){
  49. int x,y,z;
  50. x=find(root,k-); y=find(root,k+);
  51. splay(x,root); splay(y,c[x][]);
  52. z=c[y][]; c[y][]=; size[z]=fa[z]=;
  53. up(y); up(x);
  54. }
  55. void move(int k,int w){
  56. int x,y,z=pos[k],rank;
  57. splay(z,root); rank=size[c[z][]]+;
  58. del(rank);
  59. if(w==-inf) x=find(root,),y=find(root,);
  60. else if(w==inf) x=find(root,n),y=find(root,n+);
  61. else x=find(root,rank+w-),y=find(root,rank+w);
  62. splay(x,root); splay(y,c[x][]);
  63. size[z]=; fa[z]=y; c[y][]=z;
  64. up(y); up(x);
  65. }
  66. int main()
  67. {
  68. int k,T;
  69. n=read(); m=read();
  70. for(int i=;i<=n+;i++) v[i]=read(),pos[v[i]]=i;
  71. root=build(,n+);
  72. char ch[];
  73. while(m--){
  74. scanf("%s",ch); k=read();
  75. if(ch[]=='T') move(k,-inf);
  76. if(ch[]=='B') move(k,inf);
  77. if(ch[]=='I') T=read(),move(k,T);
  78. if(ch[]=='A') splay(pos[k],root),printf("%d\n",size[c[pos[k]][]]-);
  79. if(ch[]=='Q') T=find(root,k+),printf("%d\n",v[T]);
  80. }
  81. return ;
  82. }

bzoj1861 书架 splay版的更多相关文章

  1. bzoj1861 书架

    bzoj1861 书架 原题链接 神题... 先吐槽洛谷的样例 10 10 1 3 2 7 5 8 10 4 9 6 Query 3 Top 5 Ask 6 Bottom 3 Ask 3 Top 6 ...

  2. BZOJ-1861 Book 书架 Splay

    1861: [Zjoi2006]Book 书架 Time Limit: 4 Sec Memory Limit: 64 MB Submit: 1010 Solved: 588 [Submit][Stat ...

  3. BZOJ1861:[ZJOI2006]书架(Splay)

    Description 小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候,每次取出一本书,看完后放回书柜然后再拿下 ...

  4. bzoj1861 [Zjoi2006]Book 书架 splay

    小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候,每次取出一本书,看完后放回书柜然后再拿下一本.由于这些书太有吸引 ...

  5. bzoj1861 [Zjoi2006]Book 书架——splay

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1861 发现自己想splay的时候总是纠结那个点权是什么,因为splay原本是二分查找树... ...

  6. BZOJ 1861: [Zjoi2006]Book 书架 splay

    1861: [Zjoi2006]Book 书架 Description 小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书 ...

  7. [题解]bzoj 1861 Book 书架 - Splay

    1861: [Zjoi2006]Book 书架 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 1396  Solved: 803[Submit][Stat ...

  8. P2596 [ZJOI2006]书架 && Splay 区间操作(三)

    P2596 [ZJOI2006]书架 题目描述 小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候,每次取出一本书, ...

  9. 【POJ3580】【splay版】SuperMemo

    Description Your friend, Jackson is invited to a TV show called SuperMemo in which the participant i ...

随机推荐

  1. MyEclipse10安装checkStyle与findBugs插件--详细完美结局-费元星

    本人QQ:971751392(屌丝一枚) Myeclipse10安装checkStyle与findBugs插件详细完美结局方案: 资源一: http://download.csdn.net/detai ...

  2. Delphi实例之一个简易的浏览器的实现

    Delphi实例之一个简易的浏览器的实现 Delphi7的WebBrowser组件提供了很多不错的网页设计的功能,下面做一个简单的浏览器.组件很简单按照下面摆放就行了. 这是运行后的效果 源代码 主页 ...

  3. android中接入twitter进行第三方登录

    在应用中接入Twitter进行第三方登录时,开发人员遇到了一点问题,主要是概念有点混乱,这里把经验记录一下,帮助遇到同样问题的朋友. 一.注册应用并配置登录权限 这一步比较简单,就不多说了,直接去官网 ...

  4. jquery框架一点小心得

    下面的小事例 主要实现了 一和按ID查找,并获取元素的 value 或 标签内容和一个去字符串空格的小功能能 假设元素id=“myid”: 获取标签内容$("myid").html ...

  5. Qt 个性化标题栏,自定义标题栏

    目前还没有达到自己满意的地步,魔方别人写的的,先提供参考,后面在加入新的东西 头文件 #ifndef TITLEBAR_H #define TITLEBAR_H #include <QWidge ...

  6. Linux-Qt Quick学习1-Hello world

    Qt作为共平台的开发IDE.实在是强大,在Quick的学习中,与平台无关,我这里使用ubuntu和openSUSE,之所以不用Windows,是因为我想借这个机会过学习一点linux的东西,哪怕是熟悉 ...

  7. Python|花了一天,为大家整理的一套来自外国大佬的密码速查表

    简单的HTTPS服务器 检查证书信息 输出 生成自签名证书 输出 准备一个签名注册请求 输出 生成无密码的RSA秘钥文件 用一个私钥给文件签名 输出 从签名验证一个文件 输出 通过pem文件做RSA加 ...

  8. Django数据模型--表关系(一对多)

    一.一对一关系 使用方法:models.ForeignKey(要关联的模型) 举例说明:年级.教师和学生 from django.db import models class Grade(models ...

  9. LightGBM详细用法--机器学习算法--周振洋

    LightGBM算法总结 2018年08月21日 18:39:47 Ghost_Hzp 阅读数:2360 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  10. [ecmagnet][django] 如何使用django的signal

    """ 在web开发中, 你可能会遇到下面这种场景: 在用户完成某个操作后, 自动去执行一些后续的操作. 譬如用户完成修改密码后,你要发送一份确认邮件 观察者模式:观察者 ...