(╯-_-)╯╧╧

此处为错误代码。

#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. 无root权限安装python

    http://lujialong.com/?p=150 pipe 安装第三方包 http://www.lfd.uci.edu/~gohlke/pythonlibs/#pip http://www.cn ...

  2. 本地虚拟机中匿名ftp上传文件失败的问题

    在10.10.50.230中新建了一个匿名的ftp服务器,结果在10.10.50.241中上传文件时提示: local: README.txt remote: /var/ftp/pub/upload ...

  3. 提高jQuery执行效率需要注意几点

    1. 使用最新版本的jQuery jQuery的版本更新很快,你应该总是使用最新的版本.因为新版本会改进性能,还有很多新功能. 下面就来看看,不同版本的jQuery性能差异有多大.这里是三条最常见的j ...

  4. Windows ftp 连不上Linux

    1.首先检查vsftpd服务器 是否安装 $ rpm -qa | grep vsftpdvsftpd-2.2.2-11.el6.x86_64 2.显示已安装,restart the vsftpd ¥ ...

  5. Unity3D 问题流水总结

    一.error CS1612:Cannot modify a value type return value of `UnityEngine.SliderJoint2D.limits'. Consid ...

  6. D&F学数据结构系列——红黑树

    红黑树 定义:一棵二叉查找树如果满足下面的红黑性质,则为一棵红黑树: 1)每个结点不是红的就是黑的 2)根结点是黑的 3)每个叶结点是黑的 4)如果一个结点是红的,它的两个儿子都是黑的(即不可能有两个 ...

  7. FileOutputStream和FileInputStream

    package one.string; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFound ...

  8. Java基础:三步学会Java Socket编程

    Java基础:三步学会Java Socket编程 http://tech.163.com 2006-04-10 09:17:18 来源: java-cn 网友评论11 条 论坛        第一步 ...

  9. Delphi语言获得生命的原因和过程

    都说Anders Hejlsberg是Delphi语言的作者,前一阵仔细读了VCL源码,惊叹于它的巧夺天工,未免对编译器的作者有些不服气,觉得首功不是他.今天仔细想了想,还是觉得不服不行.以下是我的理 ...

  10. 不用Invoke就等用 Control.CheckForIllegalCrossThreadCalls = false;

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...