BZOJ 1861 书架
(╯-_-)╯╧╧
此处为错误代码。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 300050
#define inf 2147483646
using namespace std;
int n,m,a[maxn],x,y;
int tree[maxn][],size[maxn],fath[maxn],val[maxn],root,hash[maxn],rr=;
char s[];
void pushup(int now)
{
size[now]=size[tree[now][]]+size[tree[now][]]+;
}
void reset(int x)
{
fath[x]=tree[x][]=tree[x][]=;
size[x]=;
}
void sets(int x,int y)
{
swap(fath[x],fath[y]);
if (fath[x]==y)
{
fath[x]=fath[y];fath[y]=x; }
}
void build(int &now,int left,int right,int father)
{
if (left>right) return;
int mid=(left+right)>>;now=mid;
fath[now]=father;val[now]=a[mid];
build(tree[now][],left,mid-,now);
build(tree[now][],mid+,right,now);
pushup(now);
}
void rotate(int x,int &k)
{
int y=fath[x],z=fath[y],l,r;
if (tree[y][]==x) l=;else l=;
r=-l;
if (y==k) k=x;
else
{
if (tree[z][]==y) tree[z][]=x;
else tree[z][]=x;
}
fath[x]=z;fath[y]=x;fath[tree[x][r]]=y;
tree[y][l]=tree[x][r];tree[x][r]=y;
pushup(y);pushup(x);
}
void splay(int x,int &k)
{
while (x!=k)
{
int y=fath[x],z=fath[y];
if (y!=k)
{
if ((tree[y][]==x)^(tree[z][]==y)) rotate(x,k);
else rotate(y,k);
}
rotate(x,k);
}
}
int get_pre(int x)
{
int ret=tree[x][];
while (tree[ret][])
ret=tree[ret][];
return ret;
}
int get_sub(int x)
{
int ret=tree[x][];
while (tree[ret][])
ret=tree[ret][];
return ret;
}
void delete_(int x)
{
splay(x,root);
int pre=get_pre(root);
int ls=tree[x][],rs=tree[x][];
root=ls;fath[ls]=fath[rs]=;splay(pre,root);
tree[root][]=rs;fath[rs]=root;pushup(root);
reset(x);
}
int find_kth(int now,int x)
{
int r=size[tree[now][]];
if (x<=r) return find_kth(tree[now][],x);
else if (x>r+) return find_kth(tree[now][],x-r-);
else
{
rr=now;
return now;
}
}
int get_rank(int x)
{
splay(x,root);
return size[tree[root][]];
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++)
{
scanf("%d",&a[i+]);
hash[a[i+]]=i+;
}
a[]=n+;a[n+]=n+;
build(root,,n+,);
for (int i=;i<=m;i++)
{
scanf("%s",s);
if (s[]=='T')
{
scanf("%d",&x);
delete_(hash[x]);
y=find_kth(root,);
splay(y,root);
int rs=tree[root][];
reset(root);
fath[root]=hash[x];fath[rs]=hash[x];tree[hash[x]][]=root;tree[hash[x]][]=rs;pushup(hash[x]);
root=hash[x];
splay((n+)>>,root);
}
else if (s[]=='B')
{
scanf("%d",&x);
delete_(hash[x]);
y=find_kth(root,n+);
splay(y,root);
int ls=tree[root][];
reset(root);
fath[root]=hash[x];fath[ls]=hash[x];tree[hash[x]][]=root;tree[hash[x]][]=ls;pushup(hash[x]);
root=hash[x];
splay((n+)>>,root);
}
else if (s[]=='I')
{
scanf("%d%d",&x,&y);
if (y==) continue;
else if (y==-)
{
int pre=get_pre(hash[x]);
sets(pre,hash[x]);
}
else
{
int sub=get_sub(hash[x]);
sets(hash[x],sub);
}
splay(hash[x],root);
}
else if (s[]=='A')
{
scanf("%d",&x);
printf("%d\n",get_rank(hash[x])-);
splay(hash[x],root);
}
else
{
rr=;
scanf("%d",&x);
printf("%d\n",val[find_kth(root,x+)]);
splay(rr,root);
}
}
return ;
}
BZOJ 1861 书架的更多相关文章
- BZOJ 1861书架
小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候,每次取出一本书,看完后放回书柜然后再拿下一本.由于这些书太有吸引 ...
- [题解]bzoj 1861 Book 书架 - Splay
1861: [Zjoi2006]Book 书架 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 1396 Solved: 803[Submit][Stat ...
- BZOJ 1861: [Zjoi2006]Book 书架
1861: [Zjoi2006]Book 书架 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 1290 Solved: 740[Submit][Stat ...
- BZOJ 1861: [Zjoi2006]Book 书架 splay
1861: [Zjoi2006]Book 书架 Description 小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书 ...
- 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 书架 | SPlay 板题
#include<cstdio> #include<algorithm> #include<cstring> #define N 80010 #define whi ...
- BZOJ 1861 [Zjoi2006]Book 书架 ——Splay
[题目分析] 模板题目. 首尾两个虚拟结点,十分方便操作. [代码] #include <cstdio> #include <cstring> #include <cma ...
- [bzoj 1861][zjoi2006] 书架
传送门 Description 1. Top S--表示把编号为S的书放在最上面. 2. Bottom S--表示把编号为S的书放在最下面. 3. Insert S T--T∈{-1,0,1},若编号 ...
- bzoj 1861 treap
思路:搞搞平衡树. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #def ...
随机推荐
- java中的静态static关键字
类的静态成员函数不能访问非静态的成员函数以及非静态的成员变量, 但是反过来却是成立的. 即:非静态成员函数可以访问静态成员函数和静态成员变量. 这个可以从静态成员的特点来解释,因为静态成员属于类,因此 ...
- Java Servlet Filter(转)
做web开发的人对于Filter应该不会陌生,一直在很简单的使用,但是一直没有系统的总结一下,随着年纪的慢慢长大,喜欢总结一些事情,下面说说我对Filter的理解,官方给出的Filter的定义是在请求 ...
- Unity3D脚本中文系列教程(九)
Unity3D脚本中文系列教程(八) name 对象名称hideFlags 该物体是否被隐藏,保存在场景中或被用户修改继承的函数 GetInstanceID 返回该物体的实例id继承的类函数 oper ...
- 管道命令xargs
在研究hadoop的过程中,遇到一个小难题. 问题描述:我需要将文件夹A下的文件拷贝到文件夹B中,但是以hadoop开头的文件不要拷贝. 问题解决:ls A|grep -v hadoop|xargs ...
- How to Enable 64-bit Processes for Enhanced Protected Mode in Internet Explorer 11 (IE11)
Information Enhanced Protected Mode (EPM) adds additional security to Protected Mode and includes ...
- POJ 1504 Adding Reversed Numbers (水题,高精度整数加法)
题意:给两个整数,求这两个数的反向数的和的反向数,和的末尾若为0,反向后则舍去即可.即若1200,反向数为21.题目给出的数据的末尾不会出现0,但是他们的和的末尾可能会出现0. #include &l ...
- C#画图
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Dr ...
- POJ 3318 Matrix Multiplication(矩阵乘法)
题目链接 题意 : 给你三个n维矩阵,让你判断A*B是否等于C. 思路 :优化将二维转化成一维的.随机生成一个一维向量d,使得A*(B*d)=C*d,多次生成多次测试即可使错误概率大大减小. #inc ...
- JS创建对象
本人常用的创建对象的方式,仅供参考,欢迎吐槽,谢谢! 创建对象1.对象字面量,即使用大括号,如下: (function(){ var obj = { id: 1, desc: '创建对象测试开始啦!' ...
- java:内部类与外部类的区别和联系
注意事项一:在内部类中可以随意使用外部类的成员方法以及成员变量. 众所周知,在定义成员方法或者成员变量的时候,可以给其加上一些权限的修饰词,以防止其他类的访问.如在成员变量或者成员方法前面,加上Pri ...