bzoj1861 书架 splay版
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=,inf=;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int n,m,root;
int c[M][],size[M],fa[M],v[M],pos[M];
void up(int k){size[k]=size[c[k][]]+size[c[k][]]+;}
void rotate(int x,int& k){
int y=fa[x],z=fa[y],l=,r=;
if(c[y][]==x) l=,r=;
if(y==k) k=x;
else{if(c[z][]==y) c[z][]=x; else c[z][]=x;}
fa[y]=x; fa[x]=z; fa[c[x][r]]=y;
c[y][l]=c[x][r]; c[x][r]=y;
up(y); up(x);
}
void splay(int x,int& k){
while(x!=k){
int y=fa[x],z=fa[y];
if(y!=k){
if(c[z][]==y^c[y][]==x) rotate(y,k);
else rotate(x,k);
}
rotate(x,k);
}
}
int find(int x,int rank){
int l=c[x][],r=c[x][];
if(size[l]+==rank) return x;
else if(size[l]>=rank) return find(l,rank);
else return find(r,rank-size[l]-);
}
int build(int l,int r){
if(l>r) return ;
int m=(l+r)>>;
c[m][]=build(l,m-);
c[m][]=build(m+,r);
for(int i=;i<;i++) if(c[m][i]) fa[c[m][i]]=m;
up(m); return m;
}
void del(int k){
int x,y,z;
x=find(root,k-); y=find(root,k+);
splay(x,root); splay(y,c[x][]);
z=c[y][]; c[y][]=; size[z]=fa[z]=;
up(y); up(x);
}
void move(int k,int w){
int x,y,z=pos[k],rank;
splay(z,root); rank=size[c[z][]]+;
del(rank);
if(w==-inf) x=find(root,),y=find(root,);
else if(w==inf) x=find(root,n),y=find(root,n+);
else x=find(root,rank+w-),y=find(root,rank+w);
splay(x,root); splay(y,c[x][]);
size[z]=; fa[z]=y; c[y][]=z;
up(y); up(x);
}
int main()
{
int k,T;
n=read(); m=read();
for(int i=;i<=n+;i++) v[i]=read(),pos[v[i]]=i;
root=build(,n+);
char ch[];
while(m--){
scanf("%s",ch); k=read();
if(ch[]=='T') move(k,-inf);
if(ch[]=='B') move(k,inf);
if(ch[]=='I') T=read(),move(k,T);
if(ch[]=='A') splay(pos[k],root),printf("%d\n",size[c[pos[k]][]]-);
if(ch[]=='Q') T=find(root,k+),printf("%d\n",v[T]);
}
return ;
}
bzoj1861 书架 splay版的更多相关文章
- 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 ...
- BZOJ-1861 Book 书架 Splay
1861: [Zjoi2006]Book 书架 Time Limit: 4 Sec Memory Limit: 64 MB Submit: 1010 Solved: 588 [Submit][Stat ...
- BZOJ1861:[ZJOI2006]书架(Splay)
Description 小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候,每次取出一本书,看完后放回书柜然后再拿下 ...
- bzoj1861 [Zjoi2006]Book 书架 splay
小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候,每次取出一本书,看完后放回书柜然后再拿下一本.由于这些书太有吸引 ...
- bzoj1861 [Zjoi2006]Book 书架——splay
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1861 发现自己想splay的时候总是纠结那个点权是什么,因为splay原本是二分查找树... ...
- BZOJ 1861: [Zjoi2006]Book 书架 splay
1861: [Zjoi2006]Book 书架 Description 小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书 ...
- [题解]bzoj 1861 Book 书架 - Splay
1861: [Zjoi2006]Book 书架 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 1396 Solved: 803[Submit][Stat ...
- P2596 [ZJOI2006]书架 && Splay 区间操作(三)
P2596 [ZJOI2006]书架 题目描述 小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候,每次取出一本书, ...
- 【POJ3580】【splay版】SuperMemo
Description Your friend, Jackson is invited to a TV show called SuperMemo in which the participant i ...
随机推荐
- kettle 遇到 解决Incorrect integer value: '' for column 'id' at row 1 完美解决-费元星
最近自己在测试一个开源的程序,测试中发现.该程序都添加和更新的时候回出现 Incorrect integer value: '' for column 'id' at row 1类是的错误! 后来我自 ...
- 安装Sql Server 2008时出错
在安装Sql Server 2008的时候,出现一个错误,说是"SQL Server 2005 Express tools"安装了,需要移除,但是我在控制面板里面找了 ...
- 白话HMM系列1——从一个缩略语还原的例子说起
HMM到底是一个什么样的东西,我想从我研究的一个应用场景开始说起.之所以想重新描述一下我对HMM的理解,是因为上次面试百度糯米的时候,自己没有把HMM在应用上说的很明白,不过糯米的那位郑姓面试官我也是 ...
- 「暑期训练」「Brute Force」 Optimal Point on a Line (Educational Codeforces Round 16, B)
题意 You are given n points on a line with their coordinates $x_i$. Find the point x so the sum of dis ...
- 使用IDEA快速搭建Gradle项目
- Loadrunner11.0安装与简单使用
公司开发了APP或者微信小程序啊什么的,都会先进行性能测试,而性能测试一般肯定会来测试接口的压测,并发.Loadrunner是一个很强大的测试工具,它是一种预测系统行为和性能的负载测试工具.通过以模拟 ...
- eclipse返回快捷键
1.图上第一个箭头(Ctrl + Q) 返回上一个编辑点(编辑,修改代码) 2.图上第二个箭头(Alt + Left) 返回上一个操作点(点击进入方法等操作) 3.图上第三个箭头(Alt + Righ ...
- Visual Studio 2014安装包
点击下载
- 第16讲——C++中的代码重用
C++的一个主要目标是促进代码重用.除了我们之前学的公有继承,我们在这一讲将介绍另一种代码重用的方法——类模板.
- get? post? put? delete? head? trace? options? http请求方法
http1.1协议里面定义了八种请求方法: get:用作获取,读取数据 post:向指定的资源提交数据 put:更新,向指定的资源上传一个内容,比如说:更新一个用户的头像或者替换掉已有的一个视频 de ...