ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

NC14661 简单的数据结构

2022-07-02 15:04:01  阅读:161  来源: 互联网

标签:int 元素 rev cin else 简单 数据结构 NC14661 op


NC14661 简单的数据结构

题目

题目描述

栗酱有一天在网上冲浪的时候发现了一道很有意思的数据结构题。

该数据结构形如长条形。

一开始该容器为空,有以下七种操作。

1 a从前面插入元素a

2 从前面删除一个元素

3 a从后面插入一个元素

4 从后面删除一个元素

5 将整个容器头尾翻转

6 输出个数和所有元素

7 对所有元素进行从小到大排序

输入描述

只有一组数据,第一行 \(n≤50000,m≤200000, a≤100000\) 代表最大数据数目和操作次数。
接下来每一行一个操作如上描述。保证所有操作合法(不会在容器为空时删除元素)。
6、7操作共计不会超过10次。

输出描述

当执行6操作时,第一行先输出当前的个数,然后从头到尾按顺序输出,每两个元素之间用一个空格隔开,末尾不能有空格。

示例1

输入

10 9
1 1
3 5
3 4
6
4
5
6
7
6

输出

3
1 5 4
2
5 1
2
1 5

题解

思路

知识点:队列。

一道双端队列的模板题,用 stl 的 \(deque\) 能完美解决。

注意的是反转操作并非真反转,只要标记是否是反转状态,然后队头弹出/压入和队尾弹出/压入互相交换,排序用正向迭代器和反向迭代器交换就行。

stl 的双端队列存储的内存并非连续内存,是分段连续内存,在跨段时用通常会慢一些,因此时间复杂度常数比 \(vector\) 大。通常 \(queue\) 以及 \(stack\) 是继承 \(deque\) 的因此速度也是比较慢的。

时间复杂度 压入/弹出/反转 \(O(1)\) ,随机存取 \(O(1)\) ,排序 \(O(n \log n)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>

using namespace std;

int main() {
    std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int n, m;
    cin >> n >> m;
    deque<int> d;
    bool rev = false;
    while (m--) {
        int op;
        cin >> op;
        if (op == 1) {
            int t;
            cin >> t;
            if (rev) d.push_back(t);
            else d.push_front(t);
        }
        else if (op == 2) {
            if (rev) d.pop_back();
            else d.pop_front();
        }
        else if (op == 3) {
            int t;
            cin >> t;
            if (rev) d.push_front(t);
            else d.push_back(t);
        }
        else if (op == 4) {
            if (rev) d.pop_front();
            else d.pop_back();
        }
        else if (op == 5) rev ^= 1;
        else if (op == 6) {
            cout << d.size() << '\n';
            if (rev) for (int j = d.size() - 1;j >= 0;j--) cout << d[j] << ' ';
            else for (int j = 0;j < d.size();j++) cout << d[j] << ' ';
            cout << '\n';
        }
        else if (op == 7) {
            if (rev) sort(d.rbegin(), d.rend());
            else sort(d.begin(), d.end());
        }
    }
    return 0;
}

标签:int,元素,rev,cin,else,简单,数据结构,NC14661,op
来源: https://www.cnblogs.com/BlankYang/p/16437565.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有