(╯-_-)╯╧╧

此处为错误代码。

#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 书架的更多相关文章

  1. BZOJ 1861书架

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

  2. [题解]bzoj 1861 Book 书架 - Splay

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

  3. BZOJ 1861: [Zjoi2006]Book 书架

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

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

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

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

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

  6. BZOJ 1861: [Zjoi2006]Book 书架 | SPlay 板题

    #include<cstdio> #include<algorithm> #include<cstring> #define N 80010 #define whi ...

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

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

  8. [bzoj 1861][zjoi2006] 书架

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

  9. bzoj 1861 treap

    思路:搞搞平衡树. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #def ...

随机推荐

  1. WSDL 文档解析

    学习webservice,就离不了WSDL文档,他是我们开发WebService的基础,虽说,现在现在有许多WebService的开源框架使得我们可以根据WSDL生成客户端代码,但是,了解WSDL文档 ...

  2. OWASP

    开放式Web应用程序安全项目(OWASP,Open Web Application Security Project)是一个组织,它提供有关计算机和互联网应用程序的公正.实际.有成本效益的信息.其目的 ...

  3. Tomcat就是个容器,一种软件

    1.tomcat就是一个容器而已,一个软件,运行在java虚拟机. 2.tomcat是一种能接收http协议的软件,java程序猿自己也可以写出http解析的服务器啊. 3.tomcat支持servl ...

  4. Bolt 动画

    引擎内置的 种动画 --PosChangeAnimation 平移 local ani = XLGetObject("Xunlei.UIEngine.AnimationFactory&quo ...

  5. epmap服务

    epmap是 tcp 135和udp135端口135端口的“epmap - DCE endpoint resolution”记录可以通过连接到135端口和做适当的查询列举出来. 135端口大多数情况下 ...

  6. Android Service实时向Activity传递数据

    演示一个案例,需求如下:在Service组件中创建一个线程,该线程用来生产数值,每隔1秒数值自动加1,然后把更新后的数值在界面上实时显示. 步骤如下:1.新建一个android项目工程,取名为demo ...

  7. Python第一天——初识Python

    python是由荷兰人Guido van Rossum 于1989年发明的一种面向对象的的解释型计算机程序设语言,也可以称之为编程语言.例如java.php.c语言等都是编程语言. 那么为什么会有编程 ...

  8. NET Remoting 示例

    .NET Remoting是.NET平台上允许存在于不同应用程序域中的对象相互知晓对方并进行通讯的基础设施.调用对象被称为客户端,而被调用对象则被称为服务器或者服务器对象.简而言之,它就是.NET平台 ...

  9. (转)Spring的编程式事务例子

    纯JDBC操作, 对某些项目来说, 也许更好, Spring JDBC Framework让你不用关心Connection, Statement, ResultSet. 定义数据源 spring事务编 ...

  10. Python数字加千分符

    1.最简单的内置format函数: >>> format(1234567890,',') '1,234,567,890' 2.正则表达式: import re def formatN ...