【bzoj1269】[AHOI2006]文本编辑器editor
2016-03-25 21:06
387 查看
在bzoj上乱翻,发现了可持久化并查集,然后baidu了一下,发现一种叫rope的东西。
!!!真的太爽了!!!
直接上代码,感受一下(也是蒯来的)。
由于rope的底层实现,insert,erase,get都是logn的
就是翻转不行,不是自己手写的打不了标记。
rope的部分简单操作
参考博客:http://blog.csdn.net/iamzky/article/details/38348653
在此表示感谢!!!
!!!真的太爽了!!!
直接上代码,感受一下(也是蒯来的)。
#include<algorithm>
#include<ext/rope>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#include<set>
using
namespace
__gnu_cxx;
using
namespace
std;
#define N 2000010
crope a,b,tmp;
char
str ,rstr ;
char
ch[10];
int
n;
int
k,len,s;
int
main()
{
scanf
(
"%d"
,&n);
while
(n--)
{
scanf
(
"%s"
,ch);
switch
(ch[0])
{
case
'M'
:
scanf
(
"%d"
,&k);
break
;
case
'P'
:
k--;
break
;
case
'N'
:
k++;
break
;
case
'G'
:
putchar
(a[k]);
putchar
(
'\n'
);
break
;
case
'I'
:
scanf
(
"%d"
,&s);
len=a.length();
for
(
int
i=0;i<s;i++)
{
do
{
str[i]=
getchar
();
}
while
(str[i]==
'\n'
);
rstr[s-i-1]=str[i];
}
rstr[s]=str[s]=
'\0'
;
a.insert(k,str);
b.insert(len-k,rstr);
break
;
case
'D'
:
scanf
(
"%d"
,&s);
len=a.size();
a.erase(k,s);
b.erase(len-k-s,s);
break
;
case
'R'
:
scanf
(
"%d"
,&s);
len=a.size();
tmp=a.substr(k,s);
a=a.substr(0,k)+b.substr(len-k-s,s)+a.substr(k+s,len-k-s);
b=b.substr(0,len-k-s)+tmp+b.substr(len-k,k);
break
;
}
}
return
0;
}
由于rope的底层实现,insert,erase,get都是logn的
就是翻转不行,不是自己手写的打不了标记。
rope的部分简单操作
函数 | 功能 |
push_back(x) | 在末尾添加x |
insert(pos,x) | 在pos插入x |
erase(pos,x) | 从pos开始删除x个 |
replace(pos,x) | 从pos开始换成x |
substr(pos,x) | 提取pos开始x个 |
at(x)/[x] | 访问第x个元素 |
在此表示感谢!!!
相关文章推荐
- poj-1131-(大数)八进制转化成十进制
- Python--类定义
- 第一遍 第三章线性表
- Http协议访问DataSnap Rest 服务器 - 封三郎
- Spark 性能相关参数配置详解-Storage篇
- java语言程序设计第十版(Introduce to java 10th) 课后习题 chapter7-32
- 遗传算法学习心得
- java通过JDBC访问mysql数据库
- RTSP实例解析
- 开始启程,你的第一行
- HDU 3622 Bomb Game(2-sat)
- 【bzoj1406】[AHOI2007]密码箱
- 声明了包的类Java命令找不到或无法加载主类
- ext2文件系统源代码之xattr_security.c
- 大数据工程师要学习的内容
- Bzoj3791:作业:DP
- 在Editplus配置PHP
- 第一遍 第二章算法
- 把本地的int类型的图片转换成drawable、Bitmap
- ext2文件系统源代码之xattr_user.c