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 ...
随机推荐
- MyEclipse10安装checkStyle与findBugs插件--详细完美结局-费元星
本人QQ:971751392(屌丝一枚) Myeclipse10安装checkStyle与findBugs插件详细完美结局方案: 资源一: http://download.csdn.net/detai ...
- Delphi实例之一个简易的浏览器的实现
Delphi实例之一个简易的浏览器的实现 Delphi7的WebBrowser组件提供了很多不错的网页设计的功能,下面做一个简单的浏览器.组件很简单按照下面摆放就行了. 这是运行后的效果 源代码 主页 ...
- android中接入twitter进行第三方登录
在应用中接入Twitter进行第三方登录时,开发人员遇到了一点问题,主要是概念有点混乱,这里把经验记录一下,帮助遇到同样问题的朋友. 一.注册应用并配置登录权限 这一步比较简单,就不多说了,直接去官网 ...
- jquery框架一点小心得
下面的小事例 主要实现了 一和按ID查找,并获取元素的 value 或 标签内容和一个去字符串空格的小功能能 假设元素id=“myid”: 获取标签内容$("myid").html ...
- Qt 个性化标题栏,自定义标题栏
目前还没有达到自己满意的地步,魔方别人写的的,先提供参考,后面在加入新的东西 头文件 #ifndef TITLEBAR_H #define TITLEBAR_H #include <QWidge ...
- Linux-Qt Quick学习1-Hello world
Qt作为共平台的开发IDE.实在是强大,在Quick的学习中,与平台无关,我这里使用ubuntu和openSUSE,之所以不用Windows,是因为我想借这个机会过学习一点linux的东西,哪怕是熟悉 ...
- Python|花了一天,为大家整理的一套来自外国大佬的密码速查表
简单的HTTPS服务器 检查证书信息 输出 生成自签名证书 输出 准备一个签名注册请求 输出 生成无密码的RSA秘钥文件 用一个私钥给文件签名 输出 从签名验证一个文件 输出 通过pem文件做RSA加 ...
- Django数据模型--表关系(一对多)
一.一对一关系 使用方法:models.ForeignKey(要关联的模型) 举例说明:年级.教师和学生 from django.db import models class Grade(models ...
- LightGBM详细用法--机器学习算法--周振洋
LightGBM算法总结 2018年08月21日 18:39:47 Ghost_Hzp 阅读数:2360 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...
- [ecmagnet][django] 如何使用django的signal
""" 在web开发中, 你可能会遇到下面这种场景: 在用户完成某个操作后, 自动去执行一些后续的操作. 譬如用户完成修改密码后,你要发送一份确认邮件 观察者模式:观察者 ...