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 这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器.你能帮助他吗?为了明确任务目 ...
随机推荐
- c++Template 的辨析
1.在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢? 答:class用于定义类,在模板引入c++后,最初定义模板的方 ...
- postgresql----INSERT
INSERT即向表中写入数据,每条INSERT语句可以写入一条数据,也可以写入多条数据.另外还可以将其他的查询结果集用在INSERT中,将查询结果写入表中. 测试表 test)); CREATE TA ...
- jenkins前端构建
nginx 安装yum install nginx //输入下载 or yum install epel-release //如果上一步安装失败 yum install nginx //再次下载 配置 ...
- Fatal error in launcher: Unable to create process using '"c:\python37\python3.exe" "C:\Python37\Scripts\pip3.exe" install opencv-python'
pip3.exe install opencv-python 报错: Fatal error in launcher: Unable to create process using '"c: ...
- redis cluster 集群畅谈(三) 之 水平扩容、slave自动化迁移
上一篇http://www.cnblogs.com/qinyujie/p/9029522.html, 主要讲解 实验多master写入.读写分离.实验自动故障切换(高可用性),那么本篇我们就来聊了聊r ...
- wsdl客户端代码生成的方法
在jdk的bin目录下有一个wsimport.exe的工具,使用该工具命令生产java客户端代码: 命令如下: wsimport -keep -d d:\ -s d:\src -p com.map ...
- (2.15)Mysql之SQL基础——开发设计最佳规范
(2.15)Mysql之SQL基础——开发设计最佳规范 关键字:mysql三大范式,mysql sql开发规范 分析: show profile.mysqllsla.mysqldrmpslow.exp ...
- mysql 数据操作 单表查询 group by 聚合函数
强调: 如果我们用unique的字段作为分组的依据,则每一条记录自成一组,这种分组没有意义 多条记录之间的某个字段值相同,该字段通常用来作为分组的依据 如果按照每个字段都是唯一的进行分组,意味着按照这 ...
- LockSupport HotSpot里park/unpark的实现
每个java线程都有一个Parker实例,Parker类是这样定义的: class Parker : public os::PlatformParker { private: volatile int ...
- Spring中基于Java的配置@Configuration和@Bean用法
spring中为了减少xml中配置,可以声明一个配置类(例如SpringConfig)来对bean进行配置. 一.首先,需要xml中进行少量的配置来启动Java配置: <?xml version ...