#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 80010
#define which(x) (ls[fa[(x)]]==(x))
using namespace std;
int id[N],pos[N],sz[N],ls[N],rs[N],fa[N],tot,n,m,root,a[N];
char op[];
void pushup(int x) {sz[x]=+sz[ls[x]]+sz[rs[x]];}
int Build(int l,int r,int pre)
{
if (l>r) return ;
int mid=l+r>>,u=a[mid];
ls[u]=Build(l,mid-,u);
rs[u]=Build(mid+,r,u);
fa[u]=pre;
pushup(u);
return u;
}
void Rotate(int u){
int v = fa[u], w = fa[v], b = which(u) ? rs[u] : ls[u];
if(w) which(v) ? ls[w] = u : rs[w] = u;
which(u) ? (ls[v] = b, rs[u] = v) : (rs[v] = b, ls[u] = v);
fa[u] = w, fa[v] = u;
if(b) fa[b] = v;
pushup(v), pushup(u);
}
void Splay(int u, int tar){
while(fa[u] != tar){
if(fa[fa[u]] != tar){
if(which(u) == which(fa[u])) Rotate(fa[u]);
else Rotate(u);
}
Rotate(u);
}
if(!tar) root = u;
}
int getrank(int u)
{
Splay(u,);
return sz[ls[u]];
}
int getkth(int k)
{
int cur=root;
while (sz[ls[cur]]+!=k)
{
if (k<=sz[ls[cur]]) cur=ls[cur];
else k-=sz[ls[cur]]+,cur=rs[cur];
}
return cur;
}
void insert(int v,int top)
{
int u=root;
while (top?ls[u]:rs[u])
u=top?ls[u]:rs[u];
fa[v]=u,top?ls[u]=v:rs[u]=v,sz[v]=;
ls[v]=rs[v]=;
Splay(v,);
}
void erase(int u)
{
Splay(u,);
if (sz[u]==) root;
else if (!ls[u] || !rs[u]) root=ls[u]+rs[u],fa[root]=;
else
{
fa[ls[u]]=;
int v=ls[u];
while (rs[v]) v=rs[v];
Splay(v,);
rs[v]=rs[u],fa[rs[u]]=v,pushup(v);
}
}
void swp(int u,int x)
{
Splay(u,);
int v=x<?ls[u]:rs[u];
while (x<?rs[v]:ls[v]) v=x<=?rs[v]:ls[v];
Splay(v,u);
if (x<) swap(rs[u],rs[v]),ls[u]=ls[v],ls[v]=u;
else swap(ls[u],ls[v]),rs[u]=rs[v],rs[v]=u;
fa[v]=,fa[ls[u]]=fa[rs[u]]=u,fa[ls[v]]=fa[rs[v]]=v;
pushup(u),pushup(v);
root=v;
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=,x;i<=n;i++)
scanf("%d",&a[i]);
root=Build(,n,);
for (int i=,t,x;i<=m;i++)
{
scanf("%s%d",op,&x);
if (op[]=='T') erase(x),insert(x,);
if (op[]=='B') erase(x),insert(x,);
if (op[]=='A') printf("%d\n",getrank(x));
if (op[]=='Q') printf("%d\n",getkth(x));
if (op[]=='I')
{
scanf("%d",&t);
if (t) swp(x,t);
}
}
return ;
}

BZOJ 1861: [Zjoi2006]Book 书架 | SPlay 板题的更多相关文章

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

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

  2. BZOJ 1861 [Zjoi2006]Book 书架 ——Splay

    [题目分析] 模板题目. 首尾两个虚拟结点,十分方便操作. [代码] #include <cstdio> #include <cstring> #include <cma ...

  3. BZOJ 1861: [Zjoi2006]Book 书架 (splay)

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

  4. BZOJ 1861: [Zjoi2006]Book 书架

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

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

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

  6. BZOJ 4522: [Cqoi2016]密钥破解 (Pollard-Rho板题)

    Pollard-Rho 模板 板题-没啥说的- 求逆元出来后如果是负的记得加回正数 CODE #include<bits/stdc++.h> using namespace std; ty ...

  7. [bzoj 1861][zjoi2006] 书架

    传送门 Description 1. Top S--表示把编号为S的书放在最上面. 2. Bottom S--表示把编号为S的书放在最下面. 3. Insert S T--T∈{-1,0,1},若编号 ...

  8. bzoj1861 [Zjoi2006]Book 书架 splay

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

  9. BZOJ[NOI2004]郁闷的出纳员 | Splay板子题

    题目: 洛谷也能评测....还有我wa了10多次的记录233 题解: 不要想得太复杂,搞一个全局变量记录一下工资的改变量Delta,这样可以等询问的时候就输出val+Delta,然后插入的时候插入x- ...

随机推荐

  1. JS底层挖掘

    //Promise版本的Ajaxconst getJSON = function(url) { const promise =new Promise(function(resolve, reject) ...

  2. Python 初始—(项目 目录结构)

    在os 包下,给出 import os ,os.path.abspath(__file__)获取当前文件的相对路径,os.path.dirname 获取当前文件所在的文件夹目录 print(os.pa ...

  3. AMD、CMD、Common规范及对比

    https://blog.csdn.net/bluesky1215/article/details/71081780  1.名词解释 AMD:Asynchronous Modules Definiti ...

  4. spring-IOC底层机制

    JDK与CGLIB的动态代理 JDK动态代理 创建代理的方法 将需要代理的类传入代理类中(通过构造方法) 在代理方法中创建代理实例(需要一个接口和一个实现接口的类): Proxy.newProxyIn ...

  5. linux连接FreeBSD虚拟机的mysql

    前言 本人菜鸟一枚,第一次写博客,不喜误喷. 实验环境 Opensuse15.0(主机).FreeBSD11.1(虚拟机).虚拟机VirtualBox5.2.22.mysql8.0.14 在FreeB ...

  6. Linux基础知识随笔记

    linux文件属性 ls -h human-readable以人类可读的形式显示 -i 显示inode号码 [root@oldboyedu55-bjb ~]# ls -ihl total 8.0K 3 ...

  7. spring开篇

    本文引用http://www.cnblogs.com/ityouknow/p/5292559.html spring简介: spring是一个开源框架,spring是于2003 年兴起的一个轻量级的J ...

  8. Java OOP——JAVA关键字与保留字说明及使用

    1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. - ...

  9. laravel通过make auth实现手机号登录

    首先按照Laravel的教程,安装认证系统. php artisan make:auth php artisan migrate laravel已经安装完成认证系统,默认注册和登录都是用邮箱. 如果想 ...

  10. 1014-32-首页13-cell的结构分析---导航栏中间title位置的按钮的尺寸设置---setFrame----

    #import "HWTitleButton.h" #define HWMargin 5 @implementation HWTitleButton - (id)initWithF ...