zoukankan      html  css  js  c++  java
  • ROPE

    #include <ext/rope>
    using namespace __gnu_cxx;
    int a[1000];
    rope<int> x;
    rope<int> x(a,a + n);
    rope<int> a(x);
     
    x->at(10);          //cout<<x->at(10)<<endl;
    x[10];
    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)在数列后加一个数 (2)求数列中某位置的值 
    撤销掉最后进行的若干次操作(1和3)
    输入 第一行一个正整数M。 
    接下来M行,每行开头是一个字符,若该字符为’A’,则表示一个加数操作,接下来一个整数x,表示在数列后加一个整数x;若该字符为’Q’,则表示一个询问操作,接下来一个整数x,表示求x位置的值;若该字符为’U’,则表示一个撤销操作,接下来一个整数x,表示撤销掉最后进行的若干次操作。 
    输出 对每一个询问操作单独输出一行,表示答案。
    样例输入 
    9 
    A 1 
    A 2 
    A 3 
    Q 3 
    U 1 
    A 4 
    Q 3 
    U 2 
    Q 3 
    样例输出 
    3 
    4 
    3
    提示 1<=M<=10^5
    #include<bits/stdc++.h>
    #include<ext/rope>
    using namespace std;
    using namespace __gnu_cxx;
    rope<int> *now[100005];
    void print(rope<int> s)
    {
            for (int i = 0; i < s.length(); i++)
            {
                    cout << s[i] << " ";
            }
            cout << endl;
    }
    int cnt = 0;
    int main()
    {
            now[0] = new rope<int>();
            //cout << now[0] << endl;
            int n, m;
            cin >> m;
            //print(*now[0]);
            char ch;
            int x;
            for (int i = 1; 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 - 1]);
                            now[cnt]->push_back(x);
                    }
                    else if (ch == 'Q')
                    {
                            cout << now[cnt]->at(x-1) << endl;
                    }
                    else if (ch == 'U')
                    {
                            ++cnt;
                            now[cnt] = new rope<int>(*now[cnt - 1 - x]);
                    }
                    print(*now[cnt]);
            }
    }
    View Code
  • 相关阅读:
    数据库——表操作(5)
    数据库——存储引擎(4)
    数据库——库操作(3)
    数据库——初始mysql语句(2)
    数据库——初识数据库(1)
    并发编程——协程(5)
    并发编程——IO模型(6)
    并发编程——多线程(4)
    并发编程——多进程——multiprocessing开启进程的方式及其属性(3)
    并发编程——多进程——理论(2)
  • 原文地址:https://www.cnblogs.com/Aragaki/p/8824727.html
Copyright © 2011-2022 走看看