分析:

Splay区间操作裸题,维护出区间信息,按照要求模拟,注意读入格式,并且考虑内存回收(开不下)

附上代码:

#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <map>
using namespace std;
#define N 2097200
#define ls ch[rt][0]
#define rs ch[rt][1]
#define get(rt) (ch[f[rt]][0]!=rt)
int ch[N][2],f[N],cnt,siz[N],val[N],S[N],top,rot,pos,size,rev[N];char op[20],s[N];
void clear(int rt)
{rev[rt]=ch[rt][0]=ch[rt][1]=f[rt]=siz[rt]=val[rt]=0;
}
void PushUp(int rt)
{if(rt)siz[rt]=siz[ls]+siz[rs]+1;
}
void PushDown(int rt)
{if(rev[rt]){if(ls)rev[ls]^=1,swap(ch[ls][0],ch[ls][1]);if(rs)rev[rs]^=1,swap(ch[rs][0],ch[rs][1]);rev[rt]=0;}
}
int new_node()
{int rt;if(top)rt=S[--top];else rt=++cnt;clear(rt);return rt;
}
void rotate(int rt)
{int x=f[rt],y=f[x],k=get(rt);if(y)ch[y][ch[y][0]!=x]=rt;ch[x][k]=ch[rt][!k];f[ch[x][k]]=x;ch[rt][!k]=x;f[x]=rt;f[rt]=y;if(rot==x)rot=rt;PushUp(x);PushUp(rt);
}
void Splay(int rt,int y)
{for(int fa;(fa=f[rt])!=y;rotate(rt))if(f[fa]!=y)rotate((get(fa)==get(rt))?fa:rt);
}
void build(int fa,int l,int r,bool flg)
{if(l>r)return ;int m=(l+r)>>1,rt=new_node();val[rt]=s[m];ch[fa][flg]=rt;f[rt]=fa;build(rt,l,m-1,0);build(rt,m+1,r,1);PushUp(rt);
}
int find(int x)
{int rt=rot;while(1){PushDown(rt);if(siz[ls]>=x)rt=ls;else{x-=siz[ls]+1;if(!x)return rt;rt=rs;}}
}
void rec(int rt)
{if(!rt)return ;if(ls)rec(ls);ls=0;if(rs)rec(rs);rs=0;clear(rt);S[top++]=rt;
}
void insert(int len)
{int x=find(pos),rt=find(pos+1);Splay(x,0);Splay(rt,rot);build(rt,1,len,0);PushUp(rt);PushUp(x);
}
void del(int len)
{int x=find(pos),rt=find(pos+len+1);Splay(x,0);Splay(rt,rot);rec(ls);ls=0;PushUp(rt);PushUp(x);
}
void reverse(int len)
{int x=find(pos),y=find(pos+len+1);Splay(x,0);Splay(y,rot);int rt=ch[y][0];swap(ls,rs);rev[rt]^=1;
}
int main()
{int Q;scanf("%d",&Q);siz[1]=2,siz[2]=1,ch[1][1]=2,f[2]=1,rot=pos=1,size=cnt=2;while(Q--){int x;scanf("%s",op);if(op[0]=='M')scanf("%d",&x),pos=x+1;else if(op[0]=='I'){scanf("%d",&x);for(int i=1;i<=x;i++){s[i]=getchar();while(s[i]>126||s[i]<32)s[i]=getchar();}s[x+1]='\0';//printf("%s",s+1);insert(x);size+=x;}else if(op[0]=='D'){scanf("%d",&x);if(x+pos+1>size)x=size-pos-1;del(x);size-=x;}else if(op[0]=='N')pos+=(pos!=size);else if(op[0]=='P')pos-=(pos>0);else if(op[0]=='G'){int y=find(pos),rt=find(pos+2);Splay(y,0);Splay(rt,rot);printf("%c\n",val[ls]);}else{scanf("%d",&x);if(x+pos+1>size)x=size-pos-1;reverse(x);}}return 0;
}

  

转载于:https://www.cnblogs.com/Winniechen/p/9144149.html

[NOI2003]Editor [AHOI2006]文本编辑器editor BZOJ1507BZOJ1269相关推荐

  1. BZOJ 1269: [AHOI2006]文本编辑器editor Splay

    F.A.Qs Web Board Home ProblemSet Status Ranklist Contest ModifyUser   yejinru(0) Logout 捐赠本站 Notice: ...

  2. 1269: [AHOI2006]文本编辑器editor

    1269: [AHOI2006]文本编辑器editor Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4718  Solved: 1807 [Sub ...

  3. Bzoj1269 [AHOI2006]文本编辑器editor

    Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 3678  Solved: 1380 Description 这些日子,可可不和卡卡一起玩了,原来可可 ...

  4. layui获取select 文本_小程序富文本编辑器editor初体验

    终于,微信在5月9号的v2.7.0版本中新增了 editor富文本编辑器组件,今天有时间了准备体验一下 在5月6日的时候写了一篇小程序富文本解析的「伪需求」,从wxParse到towxml的坑,当时还 ...

  5. 小程序开发笔记(二):微信小程序富文本编辑器editor的使用

      小程序在去年5月的 v2.7.0 版本新增了组件editor富文本编辑器,但对于像我这种开发新手,要熟练使用还是有一定难度.所以记录一下我的学习过程,希望对大家有帮助.   小程序有详细的微信开发 ...

  6. 小程序 html编辑器,小程序富文本编辑器editor初体验

    终于,微信在5月9号的v2.7.0版本中新增了 editor富文本编辑器组件,今天有时间了准备体验一下 在5月6日的时候写了一篇小程序富文本解析的「伪需求」,从wxParse到towxml的坑,当时还 ...

  7. 小程序editor 富文本编辑器组件

    效果: 关于editor 富文本编辑器组件 复制到组件common 里面.json 引用即可 链接:https://pan.baidu.com/s/1_QIp28IOVuyVFfKfFZwxKQ 提取 ...

  8. 小程序(二十五)微信小程序富文本编辑器editor上传图片

    官方给出的示例代码中图片上传功能是将图片上传至小程序的缓存中,代码如下所示: insertImage(e) {console.log(e);const that = thiswx.chooseImag ...

  9. 小程序的四次元口袋:editor富文本编辑器的使用、渲染,以及rich-text进行解析

    editor富文本 1.介绍 富文本编辑器,可以对图片.文字进行编辑.极大地丰富了我们文章的结构样式,之前小程序还没有自己开发富文本插件,而在2019年微信小程序正式发布了富文本api. 支持的类型 ...

  10. froala editor富文本编辑器出现验证失败的解决方法

    froala editor富文本编辑器出现验证失败的解决方法 出现这种情况,首先要下载源码包地址 https://www.froala.com/wysiwyg-editor 之后引用本地的 froal ...

最新文章

  1. linux 启动2个tomcat,在LINUX中启动多个TOMCAT
  2. 深度学习-我们为什么需要BN(Batch Normalization)?
  3. SVN迁移历史日志记录笔记
  4. Android LiveData组件详解以及LiveDataBus
  5. 推荐9部让你看到酣畅淋漓的复仇电影
  6. 求字符串的不重复字符的最长子串长度的问题
  7. 如何在Spring Boot App中集成H2数据库
  8. python的百分号和斜杠 除_关于python:如何替换除字母,数字,正斜杠和反斜杠之外的所有字符...
  9. CentOS 6.4 中yum命令安装php5.2.17
  10. Ffmpeg下载WINDOWS、MAC编译结果
  11. MQ如何快速实现流量削峰填谷
  12. 2007年高考北京满分作文:沉默的父爱
  13. VS2010 混合模式程序集是针对v1.1.4322版的运行时生成的 在没有配置其他信息的情况下 无法再4.0运行中
  14. 小米手机任意版本MIUI安装Google Play服务
  15. 2021年7月电动汽车保有量,充电站数量
  16. ios 按钮图片拉伸_iOS中实现图片自适应拉伸效果的方法
  17. SC8701 120W DC TO DC 电源模块的设计
  18. 代码审查(文档整理)
  19. 数据安全法(草案)概述
  20. 黑马程序员_网络电视用中国电信路由器不能联网的问题

热门文章

  1. 帆软数据集函数ds1.select()和ds1.group()函数的使用
  2. android获得其他应用窗口,安卓一个程序调用其他程序的任一界面问题
  3. Selenium爬虫 -- 图片视频的src绝对地址链接分析
  4. JAVA语言基础-面向对象(IO:IO字节流)
  5. sysV init服务脚本(入门级)
  6. 使用jxls技术导入Excel模版数据(转自其他博客)
  7. [09]表单元素(下)
  8. TurboMail邮件系统提醒广大用户小心DXXD勒索邮件
  9. 【CentOS】Centos下pip的安装
  10. BZOJ1114 : [POI2008]鲁滨逊逃生Rob