BZOJ 1861: [Zjoi2006]Book 书架 | SPlay 板题
#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 板题的更多相关文章
- BZOJ 1861: [Zjoi2006]Book 书架 splay
1861: [Zjoi2006]Book 书架 Description 小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书 ...
- BZOJ 1861 [Zjoi2006]Book 书架 ——Splay
[题目分析] 模板题目. 首尾两个虚拟结点,十分方便操作. [代码] #include <cstdio> #include <cstring> #include <cma ...
- BZOJ 1861: [Zjoi2006]Book 书架 (splay)
1861: [Zjoi2006]Book 书架 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 1453 Solved: 822[Submit][Stat ...
- BZOJ 1861: [Zjoi2006]Book 书架
1861: [Zjoi2006]Book 书架 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 1290 Solved: 740[Submit][Stat ...
- bzoj1861 [Zjoi2006]Book 书架——splay
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1861 发现自己想splay的时候总是纠结那个点权是什么,因为splay原本是二分查找树... ...
- BZOJ 4522: [Cqoi2016]密钥破解 (Pollard-Rho板题)
Pollard-Rho 模板 板题-没啥说的- 求逆元出来后如果是负的记得加回正数 CODE #include<bits/stdc++.h> using namespace std; ty ...
- [bzoj 1861][zjoi2006] 书架
传送门 Description 1. Top S--表示把编号为S的书放在最上面. 2. Bottom S--表示把编号为S的书放在最下面. 3. Insert S T--T∈{-1,0,1},若编号 ...
- bzoj1861 [Zjoi2006]Book 书架 splay
小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候,每次取出一本书,看完后放回书柜然后再拿下一本.由于这些书太有吸引 ...
- BZOJ[NOI2004]郁闷的出纳员 | Splay板子题
题目: 洛谷也能评测....还有我wa了10多次的记录233 题解: 不要想得太复杂,搞一个全局变量记录一下工资的改变量Delta,这样可以等询问的时候就输出val+Delta,然后插入的时候插入x- ...
随机推荐
- js加减乘除精确计算
Javascript精确计算时的bug JS无法进行精确计算的bug 在做CRM,二代审核需求审核详情页面时.需要按比例(后端传类似0.8的小数)把用户输入的数字显示在不同的地方. 在做dubheIn ...
- LeetCode567. Permutation in String
Given two strings s1 and s2, write a function to return true if s2 contains the permutation of s1. I ...
- C#进阶学习笔记(个人整理)
学习笔记 第一章: 一.回顾数组 1.变量 : 只能存储一个数据 2.数组 :存储固定大小的相同类型的数据 3.对象 : 存储多个相同/不同类型的数据 4.集合 : 特殊的容器,存储N个相同/不同类型 ...
- Java反射+注解案例
注解类代码,注解的属性可以有多个: package reflect; import java.lang.annotation.Retention; import java.lang.annotatio ...
- 【MySQL】使用SQL语句操作MySQL
前言: MySQL在工作中是最常用的数据库,但在使用Django和Flask的时候,都是使用ORM进行操作,除了select语句外,其他的SQL语句操作MySQL的能力没有啥提高,为了解决这个问题, ...
- exa命令详解
exa 是 ls 文件列表命令现代化替代品. 官网:https://the.exa.website/ GitHub:https://github.com/ogham/exa 后续整理中……
- 对Neural Machine Translation by Jointly Learning to Align and Translate论文的详解
读论文 Neural Machine Translation by Jointly Learning to Align and Translate 这个论文是在NLP中第一个使用attention机制 ...
- R-biomaRt使用-代码备份
目标:使用R脚本从ensembl上下载transcript数据 简单粗暴,直接上代码.biomaRt的介绍晚一点更新. # this file helps extract information fr ...
- POJ:3061-Subsequence(尺取法模板详解)
Subsequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18795 Accepted: 8043 Descript ...
- SpringMVC集成RSA加密算法
技术交流群: 233513714 本文介绍的是RSA加密算法+Spring Security在SpringMVC中的集成使用. Spring Security是什么? 引用: Spring Secur ...