rope是一种可持久化数组,可持久化平衡树,采用块状链表实现

#include<ext/rope> 
using namespace __gnu_cxx;
rope<int>a;

rope就是一个用可持久化平衡树实现的“重型”string

库中模板计算基本和string一样简单
各种操作的复杂度都是O(log n)
rope的基本操作有:

x.length()/x.size() 返回x的大小
x.push_back(s) 在末尾添加s
x.push_front(n) 在开头添加s
x.insert(pos,s) 在pos位置插入s
x.erase(pos,x)  从pos位置开始删除x个
x.replace(pos,s) 将位置为pos的元素换成s
x.substr(pos,x) 从pos位置开始提取x个元素
x.copy(pos,x,s) 将从pos位置开始x个元素提取到s中
x.at(x)/[x]访问第x个元素
如果需要翻转平衡树,就维护一正一反两个rope,翻转就把两个rope交换一下就行了。

但是,rope是一种非标准的STL函数,也就是说不是所有OJ都支持