rope的用法

听说内部的实现是块状链表。。
一些用法:

#include <ext/rope>
using namespace __gnu_cxx;
rope<int> *rp, r;
int a[102], n, x, pos;

// 两种构造方法
rp = new rope<int>(a, a + n + 1);
rp = new rope<int>(*rp);

rp->at(x);  //访问pos为x的数
r[x];  //同上

rp->push_back(x); //尾部增加

rp->append(x);
rp->append(a);
rp->append(a, n);

rp->insert(pos, a); //在pos处将数组a插入(pos处原来的数在插入数组之后)
rp->insert(pos, x); //在pos处将数x插入
rp->insert(pos, a, n); //在pos处将数组a的前n个插入

rp->erase(pos); //未知作用。。至少不像字面意思
rp->erase(pos, x); //在pos处开始删除x个

rp->replace(pos, x); //把pos处的数换成x
rp->replace(pos, a); //把pos处的数换成数组a(会改变总长)
rp->replace(pos, a, n); //把pos处的数换成数组a的前n个数
rp->repalce(pos, n, a); //把pos处开始的n个数替换为数组a
rp->replace(pos, n, a, n); //把pos处开始的n个数替换为a的前n个数(两个n当然可以不一样)
//对于insert和replace中不加长度修饰的数组,会默认到0停止。

r = rp->substr(pos, x); //获取在pos开始处长度为x的子串

rp->copy(pos, n, a); //将pos开始处n个数拷入a中

一些例题

bzoj3673 可持久化并查集