ROPE
2024-09-05 17:05:10
#include <ext/rope>
using namespace __gnu_cxx;
int a[];
rope<int> x;
rope<int> x(a,a + n);
rope<int> a(x); x->at(); //cout<<x->at(10)<<endl;
x[];
x->push_back(x) // 在末尾添加x
x->insert(pos,x) // 在pos插入x
x->erase(pos,x) // 从pos开始删除x个
x->replace(pos,x) // 从pos开始换成x
x->substr(pos,x) // 提取pos开始x个
描述 给一个空数列,有M次操作,每次操作是以下三种之一: ()在数列后加一个数 ()求数列中某位置的值
撤销掉最后进行的若干次操作(1和3)
输入 第一行一个正整数M。
接下来M行,每行开头是一个字符,若该字符为’A’,则表示一个加数操作,接下来一个整数x,表示在数列后加一个整数x;若该字符为’Q’,则表示一个询问操作,接下来一个整数x,表示求x位置的值;若该字符为’U’,则表示一个撤销操作,接下来一个整数x,表示撤销掉最后进行的若干次操作。
输出 对每一个询问操作单独输出一行,表示答案。
样例输入 A
A
A
Q
U
A
Q
U
Q
样例输出 提示 <=M<=^
#include<bits/stdc++.h>
#include<ext/rope>
using namespace std;
using namespace __gnu_cxx;
rope<int> *now[];
void print(rope<int> s)
{
for (int i = ; i < s.length(); i++)
{
cout << s[i] << " ";
}
cout << endl;
}
int cnt = ;
int main()
{
now[] = new rope<int>();
//cout << now[0] << endl;
int n, m;
cin >> m;
//print(*now[0]);
char ch;
int x;
for (int i = ; i <= m; i++)
{
//now[i] = new rope<int>(*now[i - 1]);
cin >> ch >> x;
if (ch == 'A')
{
++cnt;
now[cnt] = new rope<int>(*now[cnt - ]);
now[cnt]->push_back(x);
}
else if (ch == 'Q')
{
cout << now[cnt]->at(x-) << endl;
}
else if (ch == 'U')
{
++cnt;
now[cnt] = new rope<int>(*now[cnt - - x]);
}
print(*now[cnt]);
}
}
最新文章
- PostSharp AOP
- AC自动机(二维) UVA 11019 Matrix Matcher
- 微软曝光眼球追踪新专利,未来或将可以使用眼球控制HoloLens
- 2015GitWebRTC编译实录14
- eCos中的线程与同步
- Fast Matrix Operations
- IntelliJ IDEA 14.x 创建工作空间与多个Java Web项目
- 如何让android sdk manager飞奔安装sdk
- 山寨QQ音乐的布局(一)
- 腾讯AlloyTeam正式发布omi-cli脚手架 v1.0 - 创建网站无需任何配置
- AR模块常用函数
- 数据结构之ConcurrentHashMap
- 【转】IIS上的反向代理
- 【原】使用IDEA创建Maven工程时提示";...xxx/pom.xml already exists in VFS";的解决
- 【学习笔记】非监督学习-k-means
- centos6.5环境下的web项目mysql编码方式导致的中文乱码问题
- yum安装Elasticsearch5.x
- Java异步、线程池解决方案
- luogu P2123 皇后游戏
- 使用 vmstat, mpstat 和 sar 查看系统运行参数