Rope大法(可持久化平衡树)
来源:互联网 发布:皮肤软件下载 编辑:程序博客网 时间:2024/05/16 09:14
2008年OI集训论文上有介绍<对块状链表的一点研究>,其主要是结合了链表和数组各自的优点,链表中的节点指向每个数据
块,即数组,并且记录数据的个数,然后分块查找和插入。在g++头文件中,<ext/rope>中有成型的块状链表,在using namespace
__gnu_cxx;空间中,其操作十分方便。
基本操作:rope test;
test.push_back(x);//在末尾添加x
test.insert(pos,x);//在pos插入x
test.erase(pos,x);//从pos开始删除x个
test.copy(pos,len,x);//从pos开始到pos+len为止用x代替
test.replace(pos,x);//从pos开始换成x
test.substr(pos,x);//提取pos开始x个
test.at(x)/[x];//访问第x个元素
其算法复杂度n*(n^0.5),可以在很短的时间内实现快速的插入、删除和查找字符串,是一个很厉害的神器!
这里有英文版的详解:http://www.sgi.com/tech/stl/Rope.html
测试代码:
#include <iostream>#include <cstdio>#include <cstring>#include <cctype>#include <ext/rope>#include <algorithm>using namespace std;using __gnu_cxx::crope;const int maxn = 10010;char op[maxn];crope text;int main(){ text.clear(); scanf("%s",op); int l = strlen(op); for(int i = 0; i < l; i++) text += op[i]; cout<<text<<endl; cout<<"test.push_back(x);//在末尾添加x"<<endl; text.push_back('a'); cout<<text<<endl; /* text.push_back("bbb"); cout<<text<<endl;//编译错误 */ cout<<"test.insert(pos,x);//在pos插入x"<<endl; text.insert(1,'b'); cout<<text<<endl; text.insert(2,"aaa"); cout<<text<<endl<<endl; cout<<"test.erase(pos,x);//从pos开始删除x个"<<endl; text.erase(1,3); cout<<text<<endl<<endl; cout<<"test.copy(pos,len,x);//从pos开始到pos+len为止用x代替"<<endl; text.copy(1,5,op); cout<<text<<endl<<endl; cout<<"test.replace(pos,x);//从pos开始换成x"<<endl; text.replace(1,'c'); cout<<text<<endl; text.replace(1,"ccc"); cout<<text<<endl<<endl<<endl; cout<<"test.substr(pos,x);//提取pos开始x个"<<endl; //text = text.substr(2);这样默认为提取一个 cout<<text.substr(2)<<endl; cout<<text.substr(2,3)<<endl<<endl; cout<<"test.at(x)/[x];//访问第x个元素"<<endl; cout<<text.at(4)<<endl<<endl;}
0 0
- Rope大法(可持久化平衡树)
- 【Rope大法好】【STL中丧心病狂的可持久化平衡树】
- 可持久化并查集rope大法
- UVA 12538 Version Controlled IDE 可持久化平衡树 || rope
- stl之rope大法好及可持久化并查集用法
- BZOJ3673,3694:可持久化并查集(Rope/主席树)
- 【模板】可持久化数组(可持久化线段树/平衡树)
- BZOJ3674: 可持久化并查集加强版 rope
- [黑科技]__gnu_cxx::rope STL中的可持久化数组
- BZOJ3932 CQOI2015 任务查询系统-可持久化线段树-可持久化平衡树
- 【可持久化平衡树】Version Controlled IDE
- codeforces 702F 可持久化平衡树
- 【数据结构】范浩强Treap(非旋转平衡树)&可持久化Treap总结
- rope大法好
- hihoCoder 1228 Mission Impossible 6(rope大法)
- [BZOJ3166][Heoi2013]Alo(可持久化线段树+可持久化tire树)
- 可持久化线段树
- 可持久化线段树
- 【套题】2015年百度之星程序设计大赛 - 初赛(1)
- Java覆盖和隐藏
- 7、其他权限管理命令
- Callable和Future、FutureTask
- C/C++ 之 ‘++’、‘+’、‘+=’、‘-’、‘()’、‘--’ 操作符的重载实现重载
- Rope大法(可持久化平衡树)
- Java多线程基础知识(四)
- mysql密码找回
- Leetcode - 104 - Maximum Depth of Binary Tree
- STL系列之三 queue 单向队列
- ios跳转设置各种功能
- pupy 远控 Remote Administration Tool
- 第一章。
- Tomcat7基于Redis的Session共享