BZOJ 1269 【AHOI2006】 文本编辑器
题目链接:文本编辑器
这道题没啥好说的,直接上\(Splay\)就行了,板子题……
但是我某个地方忘了下放标记导致调了一晚上
听说有个东西叫\(rope\)可以直接过?然而我并不会
保存一发板子:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
#define maxn 1024*1024*2+10 using namespace std;
typedef long long llg; int m,rt,tt,now,n;
int s[maxn][2],fa[maxn],siz[maxn];
char ss[maxn],val[maxn];
bool rev[maxn]; int getint(){
int w=0;bool q=0;
char c=getchar();
while((c>'9'||c<'0')&&c!='-') c=getchar();
if(c=='-') c=getchar(),q=1;
while(c>='0'&&c<='9') w=w*10+c-'0',c=getchar();
return q?-w:w;
} void update(int x){siz[x]=siz[s[x][0]]+siz[s[x][1]]+1;}
void rotate(int x,int &k){
int p=fa[x],g=fa[p];
bool l=(x==s[p][1]),r=!l;
if(p==k) k=x;
else s[g][p==s[g][1]]=x;
fa[s[x][r]]=p; s[p][l]=s[x][r];
s[x][r]=p; fa[p]=x; fa[x]=g;
update(p),update(x);
} void splay(int x,int &k){
while(x!=k){
int p=fa[x],g=fa[p];
if(p!=k){
if((x==s[p][1])^(p==s[g][1])) rotate(x,k);
else rotate(p,k);
}
rotate(x,k);
}
} int find(int x){
int u=rt,l,r; x++;
while(u){
l=s[u][0],r=s[u][1];
if(rev[u]){
rev[l]^=1,rev[r]^=1; rev[u]=0;
swap(l,r),swap(s[u][0],s[u][1]);
}
if(siz[l]+1==x) break;
if(siz[l]>=x) u=l;
else x-=siz[l]+1,u=r;
}
return u;
} int split(int l,int r){
splay(find(l-1),rt); splay(find(r+1),s[rt][1]);
return s[s[rt][1]][0];
} int build(int l,int r){
if(l>r) return 0;
int u=++tt,mid=(l+r)>>1;
s[u][0]=build(l,mid-1),s[u][1]=build(mid+1,r);
fa[s[u][0]]=u,fa[s[u][1]]=u,val[u]=ss[mid];
update(u); return u;
} int main(){
File("a");
m=getint(); rt=1; tt=5;
s[1][0]=2; s[1][1]=3; s[3][0]=4; s[3][1]=5;
fa[4]=fa[5]=3; fa[2]=fa[3]=1;
for(int i=5;i;i--) update(i),val[i]=' ';
while(m--){
scanf("%s",ss); int u,v;
if(ss[0]=='M') now=getint();
else if(ss[0]=='P') now--;
else if(ss[0]=='N') now++;
else if(ss[0]=='G') printf("%c\n",val[find(now+1)]);
else if(ss[0]=='I'){
n=getint();
for(int i=1;i<=n;i++) ss[i]=getchar();
v=build(1,n); split(now+1,now); u=s[rt][1];
s[u][0]=v; fa[v]=u; while(u) update(u),u=fa[u];
}
else{
n=getint(); u=split(now+1,now+n);
if(ss[0]=='R') rev[u]^=1;
else{
s[fa[u]][0]=0; fa[u]=0;
update(s[rt][1]); update(rt);
}
}
}
return 0;
}
BZOJ 1269 【AHOI2006】 文本编辑器的更多相关文章
- BZOJ 1269: [AHOI2006]文本编辑器editor( splay )
splay..( BZOJ 1507 题目基本相同..双倍经验 ) ------------------------------------------------------------------ ...
- BZOJ 1269: [AHOI2006]文本编辑器editor (splay tree)
1269: [AHOI2006]文本编辑器editor Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1213 Solved: 454[Submit ...
- bzoj 1269 [AHOI2006]文本编辑器editor
原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1269 伸展树的运用,如下: #include<cstdio> #include ...
- 【BZOJ】1269: [AHOI2006]文本编辑器editor(Splay)
http://www.lydsy.com/JudgeOnline/problem.php?id=1269 这题RE2次啊,好不爽啊,我一直以为是splay的问题,其实是数组开小了......(我老犯这 ...
- 【BZOJ 1269】文本编辑器
题目 这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器.你能帮助他吗?为了明确任务目标,可可对"文本编辑器"做了一个抽象的定义: Move k:将 ...
- 1269: [AHOI2006]文本编辑器editor
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5269 Solved: 2037[Submit][Status][Discuss] Descript ...
- AHOI2006文本编辑器editor
1269: [AHOI2006]文本编辑器editor Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1885 Solved: 683[Submit ...
- BZOJ1269 [AHOI2006]文本编辑器editor 【82行splay】
1269: [AHOI2006]文本编辑器editor Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4633 Solved: 1782 [Sub ...
- BZOJ_1269&&1507_[AHOI2006]文本编辑器editor&&[NOI2003]Editor
BZOJ_1269&&1507_[AHOI2006]文本编辑器editor&&[NOI2003]Editor 题意: 分析: splay模拟即可 注意1507的读入格式 ...
- 【BZOJ1269/1507】[AHOI2006]文本编辑器editor Splay
[BZOJ1269][AHOI2006]文本编辑器editor Description 这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器.你能帮助他吗?为了明确任务目 ...
随机推荐
- Unity3D笔记五 快捷键
一.近距离查看游戏对象 在Hierarchy视图中选择游戏对象,然后在Scene视图中按快捷键“F”来近距离查看该游戏对象. 二.游戏对象不在主摄像头中? Hierarchy中双击选择需要显示的游戏对 ...
- java的synchronized有没有同步的类锁?
转自:http://langgufu.iteye.com/blog/2152608 http://www.cnblogs.com/beiyetengqing/p/6213437.html 没有... ...
- 【node】---multer模块实现图片上传---【巷子】
1.安装muterl第三方模块 cnpm install multer --save 2.使用 multer在解析完成后,会向request对象中添加一个body对象和一个file或者files对象( ...
- You don't have permission to access
局域网内配置Discuz,web端访问server端,出现以下反馈: Forbidden You don't have permission to access / on this server. 网 ...
- 用 chown 和 chmod 修改目录所属用户及权限
1.修改 tmp 目录所属用户为 root,用户组为 root chown -R root:root /tmp12.修改 tmp 目录为可写权限 chmod -R 777 /tmp
- HDU1530 Maximum Clique dp
正解:dp 解题报告: 这儿是传送门 又是个神仙题趴QAQ 这题就直接说解法辣?主要是思想比较难,真要说有什么不懂的知识点嘛也没有,所以也就没什么好另外先提一下的知识点QAQ 首先取反,就变成了求最大 ...
- python采用pika库使用rabbitmq总结,多篇笔记和示例(转)
add by zhj:作者的几篇文章参考了Rabbitmq的Tutorials中的几篇文章. 原文:http://www.01happy.com/python-pika-rabbitmq-summar ...
- Django自带的加密算法及加密模块
Django 内置的User类提供了用户密码的存储.验证.修改等功能,可以很方便你的给用户提供密码服务. 默认的Ddjango使用pbkdf2_sha256方式来存储和管理用的密码,当然是可以自定义的 ...
- android 异步线程刷新UI 以及 JSON解析 以及 url get请求
import android.os.Handler; import android.os.Message; 1. Handler mHandler = new Handler() { @Overrid ...
- Python 之各种推导式玩法
推导式套路 之前我们已经学习了最简单的列表推导式和生成器表达式.但是除此之外,其实还有字典推导式.集合推导式等等. 下面是一个以列表推导式为例的推导式详细格式,同样适用于其他推导式. variable ...