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 这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器.你能帮助他吗?为了明确任务目 ...
随机推荐
- Android中Log机制详解
Android中Log的输出有如下几种: Log.v(String tag, String msg); //VERBOSELog.d(String tag, String msg); ...
- Python - 字符串的方法及注释
%r非常有用,他的含义是不管是整形还是字符串,都将打印出来
- jQuery --- 利用a标签的download属性下载文件!
最近遇到一个项目,需要有点击下载文件的功能. 由于文件格式是多种的,对于 rar / zip / rtf / doc / xlsx / jpg等. 点击下载有的是直接跳转到后进行下载,但有的是打开进行 ...
- 微信小程序 --- 用户登录
整体逻辑:点击用户中心,如果如果整个页面没有
- Xshell配置ssh免密码登录-密钥公钥(Public key)
1 简介 ssh登录提供两种认证方式:口令(密码)认证方式和密钥认证方式.其中口令(密码)认证方式是我们最常用的一种,这里介绍密钥认证方式登录到linux/unix的方法. 使用密钥登录分为3步: 1 ...
- spring boot security 登出
<!DOCTYPE html> <html lang="zh-cn" xmlns:th="http://www.thymeleaf.org" ...
- gitlab卸载
1.停止gitlab gitlab-ctl stop 2.卸载gitlab(注意这里写的是gitlab-ce) rpm -e gitlab-ce 3.查看gitlab进程 ps aux | grep ...
- C#之父
来自为知笔记(Wiz)
- 4.2 Routing -- Defining Your Routes
一.概述 1. 当应用程序启动时,路由器负责显示模板,加载数据,另外还设置应用程序的状态.这是通过匹配当前URL到你定义的routes来实现的. 2. Ember app router中的Map方法可 ...
- linux服务器查看IO
为了方便各位和自己今后遇到此类问题能尽快解决,我这里将查看linux服务器硬盘IO访问负荷的方法同大家一起分享: 首先 .用top命令查看 top - 16:15:05 up 6 days, 6:2 ...