ACM-C++的STL之Rope容器(可持久化平衡树)

本文最后更新于:December 18, 2021 pm

rope就是一个用可持久化平衡树实现的“重型”string(然而它也可以保存int或其他的类型),它不是标准STL里的东西,属于STL扩展。可用rope代替块状链表求解问题

目录

牛客网暑期ACM多校训练营(第三场)中的C题Shuffle Cards
题目链接

介绍

Rope其主要是结合了链表和数组各自的优点,链表中的节点指向每个数据块,即数组,并且记录数据的个数,然后分块查找和插入。

头文件:#include <ext/rope>

命名空间:using namespace __gnu_cxx;(需要多添加这个命名空间)

基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//声明
rope<int>T;
rope list;
list.insert(p,str) //在p的位置插入str
list.erase(p,c) //删除list的从p开始的c个节点
list.substr(p,c) //提取list的p位置开始的c个节点
list.copy(p,c,str) //将list的p位置开始的c个节点复制给str

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个元素