#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. react搭建一个框架(react-redux-axios-antd Designs)

    废话不多说,先给一个github案例:前往.. 1.create-react-app <文件名> 安装router:npm  i react-router-dom -S; npm inst ...

  2. 堆(heap)和栈(stack)几点认识

    堆(heap)和栈(stack)主要的区别由以下几点:1.管理方式不同:2.空间大小不同:3.产生碎片不同:4.生长方向不同:5.分配归属不同:6.分配效率不同:7.存取效率不同:管理方式:对于栈来讲 ...

  3. 【赛时总结】◇赛时·VI◇ Atcoder ABC-104

    ◇赛时·VI◇ ABC-104 ◆??? 莫名爆炸……ABC都AK不了 QwQ C题竟然沦落到卡数据的地步:D题没有思路,直接放弃 ⋋( ◕ ∧ ◕ )⋌ ◆ 题目&解析 ◇A题◇ Rated ...

  4. selenium webdriver 移动到某个位置,滚动到某个位置

    https://blog.csdn.net/xiaosongbk/article/details/70231564

  5. cordforce Educational Codeforces Round 47 补题笔记 <未完>

    题目链接 http://codeforces.com/contest/1009 A. Game Shopping 直接模拟即可,用了一个队列来存储账单 #include <iostream> ...

  6. 利用python在windows环境下爬取赶集网工作信息。

    主要用到了多进程和多线程的知识,最后结果保存成csv文件格式,如有需要可改成数据库版本. 对用到的库做下简要介绍,具体请参考官方文档: xpinyin.Pinyin:将输入的中文转成拼音 concur ...

  7. React路由-基础篇

    React-Router-DOM ReactRouter网址, 安装 -npmjs找到react-router-dom -yarn add react-router-dom 基本使用方法 1.创建一个 ...

  8. python--re(匹配字符串)

    \d 匹配任何十进制数:它相当于类 [0-9]. \D 匹配任何非数字字符:它相当于类 [^0-9]. \s 匹配任何空白字符:它相当于类 [ fv]. \S 匹配任何非空白字符:它相当于类 [^ f ...

  9. mysql 自定义不规则排序

    mysql按id的指定顺序进行排序,以前解决过一次,后来忘了,记录一下 SELECT * FROM `table` WHERE id<6 order by field(id,3,5,1,2,4)

  10. Azure Cloud Service - PaaS

    使用Azure Cloud Service有一段时间了,前阵子在公司内部做一个Cloud Service培训的时候就在想,能不能用一幅图把Cloud Service所涉及的概念都罗列出来.于是就有了下 ...