牛客NC14661 简单的数据结构(deque双端队列)

题目描述

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

这个数据结构形如一个“长条形”的容器,一开始该容器是空的,有以下七种操作:

111 aaa:从前面插入一个元素 aaa

222:从前面删除一个元素

333 aaa:从后面插入一个元素 aaa

444:从后面删除一个元素

555:将整个容器头尾翻转

666:输出当前容器中元素的个数和所有元素

777:将所有元素从小到大排序

请你模拟这个数据结构的所有操作。

输入格式

第一行包含两个整数 n,mn, mn,m,其中:

nnn 表示容器中最多可以存储的元素个数(保证不会超过 nnn

mmm 表示操作的总次数

接下来 mmm 行,每行表示一个操作,格式如上所述。所有操作保证合法(例如不会在容器为空时删除元素)。

特别地,操作 666777 总共不会超过 101010 次。

输出格式

每当执行一次操作 666,请输出两行:

第一行输出当前容器中元素的个数

第二行按照当前容器顺序输出所有元素(从头到尾),相邻元素之间用一个空格隔开,末尾不能有空格。

输入样例

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

输出样例

3
1 5 4
2
5 1
2
1 5

说明/提示

【数据范围】:

  • 1≤n≤500001 ≤ n ≤ 500001n50000

  • 1≤m≤2000001 ≤ m ≤ 2000001m200000

  • 所有插入的 aaa 满足 1≤a≤1000001 ≤ a ≤ 1000001a100000

提交链接

简单的数据结构

思路分析

deque 就是一个两头操作的队列。

  • 有头插,尾插:push_front()/push_back()
  • 有头删,尾删:pop_front()/pop_back()
  • 工作性算法:sort(排序),reverse(倒置)

✅ 操作 1:从前插入

if (op == 1) {cin >> a;q.push_front(a);
}

插入到容器前端,时间复杂度 O(1)O(1)O(1)

✅ 操作 2:从前删除

else if (op == 2) {q.pop_front();
}

删除容器前端第一个元素,时间复杂度 O(1)O(1)O(1)

✅ 操作 3:从后插入

else if (op == 3) {cin >> a;q.push_back(a);
}

插入到容器末尾,时间复杂度 O(1)O(1)O(1)

✅ 操作 4:从后删除

else if (op == 4) {q.pop_back();
}

删除容器尾部元素,时间复杂度 O(1)O(1)O(1)

✅ 操作 5:整体翻转容器

else if (op == 5) {reverse(q.begin(), q.end());
}

使用 reverse() 函数直接反转整个 deque

时间复杂度 O(n),但题目说明操作次数较少(最多 101010 次),完全可以接受。

✅ 操作 6:输出容器内容

else if (op == 6) {cout << q.size() << endl;for (int x : q)cout << x << " ";cout << endl;
}

输出容器当前大小及所有元素。

完整代码

#include <bits/stdc++.h>
using namespace std;
int main()
{int n, m;cin >> n >> m;deque<int> q;while (m--) // m次操作{int op, a;cin >> op; // 操作几 1~7if (op == 1){cin >> a;q.push_front(a);}else if (op == 2){q.pop_front();}else if (op == 3){cin >> a;q.push_back(a);}else if (op == 4){q.pop_back();}else if (op == 5){reverse(q.begin(), q.end());}else if (op == 6){cout << q.size() << endl;for (int x : q)cout << x << " ";cout << endl;}else{sort(q.begin(), q.end());}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/89739.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI大模型:架构实战】32、DeepSpeed大模型训练全解析:从技术原理到千亿参数实战优化指南

DeepSpeed作为微软开源的分布式训练框架,已成为大模型工业化训练的核心工具。它通过系统级创新突破了单卡显存限制,将千亿参数模型的训练成本降低75%以上,同时提升训练速度3-8倍。 本文整合2025年最新实践,从核心技术原理(如ZeRO优化、3D并行)到千亿参数模型实战流程,全…

GraphQL与REST在微服务接口设计中的对比分析与实践

问题背景介绍 在微服务架构中&#xff0c;服务之间的接口设计成为系统灵活性、可维护性和性能的关键。传统的REST API因其简单、成熟的生态而得到广泛应用&#xff0c;但在复杂业务场景下会面临接口粒度、版本兼容、数据冗余等挑战。GraphQL作为Facebook开源的查询语言&#xf…

Git分支管理与Stash技巧:从基础到高级工作流详解

引言Git作为现代软件开发的核心工具&#xff0c;其分支管理能力是支撑团队协作开发的基石。本文将系统讲解Git分支的创建、合并、冲突解决等基础操作&#xff0c;深入剖析分支底层原理&#xff0c;并介绍stash暂存技巧和业界主流的分支管理策略&#xff0c;帮助开发者构建高效的…

windows wsl ubuntu 如何安装 maven

命令 sudo apt update sudo apt install maven验证安装是否成功&#xff1a; $ mvn -versionApache Maven 3.6.3 Maven home: /usr/share/maven Java version: 1.8.0_402, vendor: Private Build, runtime: /usr/lib/jvm/java-8-openjdk-amd64/jre Default locale: en, platf…

Swift6.1 - 可选类型处理

目录1、nil2、可选绑定3、提供后备值4、强制解包5、隐式解包可选在可能缺失值的情况下&#xff0c;请使用 可选。可选代表两种可能性&#xff1a;要么 存在一个指定类型的值&#xff0c;并可以解包可选以访问该值&#xff1b;要么 根本就没有值。举一个可能缺失值的例子&#x…

【数据结构】关于链表的面试题

一、单链表逆置1、法一思路&#xff1a;通过两个辅助指针 p和 q&#xff0c;在遍历链表时逐个反转指针方向。p初始化为 第一个有效节点&#xff0c;用于遍历原链表&#xff1b;q初始化为 NULL&#xff0c;用于临时保存 p 的下一个节点。plist->next 被置为 NULL&#xff0c;…

LVS(Linux virual server)

LVS&#xff08;Linux virual server&#xff09; 系统性能扩展方式 Scale UP&#xff1a;增强单台服务器性能&#xff0c;适合单体应用&#xff0c;但有硬件限制。 Scale Out&#xff1a;增加服务器数量&#xff0c;适合分布式和集群系统&#xff0c;可灵活扩展。 集群&#x…

在 ASP.NET Core 和 JavaScript 中配置 WebSocket

在本文中&#xff0c;我们将了解 WebSocket&#xff0c;并逐步讲解如何在客户端配置 WebSocket 并与服务器通信。首先&#xff0c;让我们先来了解一下“ WebSocket ”。什么是 WebSocketWebSocket 是一种协议&#xff0c;它提供了一种通过持久连接在客户端和服务器之间交换数据…

车载刷写框架 --- 关于私有节点刷写失败未报引起的反思

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

ABP VNext + GitHub Actions:CI/CD 全流程自动化

&#x1f31f; ABP VNext GitHub Actions&#xff1a;CI/CD 全流程自动化 &#x1f4da; 目录&#x1f31f; ABP VNext GitHub Actions&#xff1a;CI/CD 全流程自动化&#x1f929; TL;DR&#x1f504; 全局流程概览1️⃣ 准备工作与项目结构1.1 &#x1f6e0;️ 工具链与 S…

Elasticsearch 重命名索引

作者&#xff1a;来自 Elastic Alex Salgado 学习如何使用四种实用方法在 Elasticsearch 中重命名索引。 想获得 Elastic 认证&#xff1f;看看下一期 Elasticsearch Engineer 培训什么时候开始&#xff01; Elasticsearch 拥有丰富的新功能&#xff0c;帮助你根据使用场景构建…

高通8255 Android Virtio Virtio-SPI 配置方法

目录 一&#xff1a;VirtIO和Passthrough的区别 二&#xff1a;配置逻辑 三&#xff1a;配置方法 步骤一&#xff1a;QNX SPI资源配置 & 测试 配置 测试 步骤二&#xff1a;BE配置 &测试 配置 测试 步骤三&#xff1a;Hypervisor配置 配置 测试 步骤四&…

从零手写红黑树(C++实现详解)

目录 一、红黑树概述 二、红黑树节点设计 (1)枚举红黑 &#xff08;2&#xff09;红黑树的节点设计 三、红黑树核心实现:Insert 1.首先将节点遍历到对应位置创建对应节点并插入到二叉搜索树对应的位置 2.本文重点的重点 &#xff08;1&#xff09;parent为黑时直接插入即…

【黄山派-SF32LB52】—硬件原理图学习笔记

目录 一、硬件介绍 二、芯片主控 1.模组介绍 2.原理图介绍 3.模组供电电路 三、电源转换部分 1.OVP过压保护电路 2.CHG充电电路 3.系统电源桥接电路 4.LDO电路 四、Debug电路 1.一键下载电路 五、QSPI屏幕 六、SD卡 七、AUDIO音频 八、GPIO电路 1.按键部分…

从五次方程到计算机:数学抽象如何塑造现代计算

引言 数学的发展往往始于一个具体的问题&#xff0c;而后在寻求解答的过程中&#xff0c;催生出深刻的抽象理论。从五次方程的求解到抽象代数&#xff0c;再到范畴论和λ演算&#xff0c;最终影响图灵机和现代计算机的设计&#xff0c;这一历程展现了数学如何从实际问题演变为通…

剧本杀小程序开发:科技赋能,重塑推理娱乐新形态

在科技飞速发展的今天&#xff0c;各个行业都在积极探索与科技的融合&#xff0c;以实现创新发展。剧本杀行业也不例外&#xff0c;剧本杀小程序的开发&#xff0c;正是科技赋能传统娱乐的生动体现&#xff0c;它重塑了推理娱乐的新形态&#xff0c;为玩家带来了前所未有的游戏…

机器学习sklearn入门:归一化和标准化

bg&#xff1a;归一化&#xff08;Normalization&#xff09;通常指将数据按比例缩放至某个特定范围&#xff0c;但具体范围并不一定是固定的 0到1。标准化是将数据转换成均值为0&#xff0c;标准差为1的分布。使用场景&#xff1a;用归一化&#xff1a;需要严格限定范围&#…

【Project】kafka+flume+davinci广告点击实时分析系统

一、项目需求分析 某电商平台需实现广告实时点击分析系统&#xff0c;核心需求为实时统计以下内容的Top10&#xff1a; 各个广告的点击量各个省份的广告点击量各个城市的广告点击量 通过实时掌握广告投放效果&#xff0c;为广告投放策略调整和大规模投入提供依据&#xff0c;以…

JAVA后端开发——success(data) vs toAjax(rows): 何时用

toAjax(int rows)用途&#xff1a;用于不返回任何数据的 “写” 操作&#xff08;增、删、改&#xff09;。工作原理&#xff1a;它只接收一个 int 类型的参数&#xff08;通常是数据库操作影响的行数&#xff09;。它只关心这个数字是不是大于0&#xff0c;然后返回一个通用的…

pdf格式怎么提取其中一部分张页?

想从PDF里提取几个页面&#xff0c;办法还挺多的&#xff0c;下面给你唠唠常见的几种&#xff0c;保准你一看就懂。一、用专业PDF编辑软件提取 像Adobe Acrobat&#xff0c;这可是PDF编辑界的“老手”了。你先把要处理的PDF文件在Adobe Acrobat里打开&#xff0c;接着找到菜单栏…