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
  • 相关阅读:
    204. Count Primes (Integer)
    203. Remove Linked List Elements (List)
    202. Happy Number (INT)
    201. Bitwise AND of Numbers Range (Bit)
    200. Number of Islands (Graph)
    199. Binary Tree Right Side View (Tree, Stack)
    198. House Robber(Array; DP)
    191. Number of 1 Bits (Int; Bit)
    190. Reverse Bits (Int; Bit)
    189. Rotate Array(Array)
  • 原文地址:https://www.cnblogs.com/Aragaki/p/8824727.html
Copyright © 2011-2022 走看看