(╯-_-)╯╧╧

此处为错误代码。

#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. execvp使用实例

    问题描述:           本程序实现模拟shell功能,用户输入命令,返回相应的结果 问题解决: 注:        以上指出了execvp函数的使用,使用时第一个参数是文件名,第二个参数是一个 ...

  2. Centos——rpm和yum

    间歇性的学习了centos的一些使用,发现一段时间不操作,就会忘掉其中的概念或者操作方式方法,于是在此总结一下. 一.问题描述 首先,把一个我最常忘记的概念性的东西在这里记录一下: 什么是yum,什么 ...

  3. 几款实用的 JavaScript 图形图表库

    一款好的图表插件不是那么容易找到的.最近项目里需要实现统计图表功能,所以在网上搜罗了一圈,找到一些不错的图表插件,分享大家.众多周知,图形和图表要比文本更具表现力和说服力.这里给大家精心推荐几款实用的 ...

  4. unity3d 射线扫描 忽略图层

    原地址:http://blog.csdn.net/w88193363/article/details/38331205 函数说明 static RaycastHit2D[] RaycastAll(Ve ...

  5. jsp bean标签

    jsp中存在一个奇奇怪怪的bean标签. 例如 现在在java包中定义一个类test2 package bean; public class test { private int number; pu ...

  6. centos telnet --xinetd 服务

    telnet由于是明文传输,所以安全起见最好不要用telnet服务.但是由于telnet是一个比较方便的远程工具,在windows上是自带 的不需要安装客户端即可使用.如果telnet设置的比较复杂, ...

  7. android音乐播放器开发教程

    android音乐播放器开发教程 Android扫描sd卡和系统文件 Android 关于录音文件的编解码 实现米聊 微信一类的录音上传的功能 android操作sdcard中的多媒体文件——音乐列表 ...

  8. POJ 3259 Wormholes(SPFA)

    http://poj.org/problem?id=3259 题意 : 农夫约翰农场里发现了很多虫洞,他是个超级冒险迷,想利用虫洞回到过去,看再回来的时候能不能看到没有离开之前的自己,农场里有N块地, ...

  9. lintcode 中等题:Singleton number II 落单的数 II

    题目 落单的数 II 给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字. 样例 给出 [1,1,2,3,3,3,2,2,4,1] ,返回 4 挑战 一次遍历,常数级 ...

  10. *[codility]MinAvgTwoSlice

    https://codility.com/demo/take-sample-test/min_avg_two_slice 此题要求一个数组子段的最小的平均数(返回第一个数字的index).刚开始想记录 ...