当前位置: 首页 > news >正文

牛客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.dtcms.com/a/289154.html

相关文章:

  • python学智能算法(二十六)|SVM-拉格朗日函数构造
  • 非广告!! 【实用工具推荐】自用多功能视频播放器-РotРlayer详细图文安装使用教程
  • 【安卓笔记】RecyclerView之ItemDecoration实现吸顶效果
  • codepen使用
  • FFmpeg 图片处理
  • 数据结构 | 栈:构建高效数据处理的基石
  • 【高等数学】第四章 不定积分——第三节 分部积分法
  • 【深度学习新浪潮】什么是robotaxi?
  • 【设计模式C#】享元模式(用于解决多次创建对象而导致的性能问题)
  • MPLS转发
  • windows C#-本地函数
  • Docker Compose 配置
  • docker compose 编排容器 mysql Springboot应用
  • 使用pytorch创建模型时,nn.BatchNorm1d(128)的作用是什么?
  • gradle关于dependency-management的使用
  • SpringBoot 整合 Langchain4j 实现会话记忆存储深度解析
  • OpenCV 入门知识:图片展示、摄像头捕获、控制鼠标及其 Trackbar(滑动条)生成!
  • 【LeetCode刷题指南】--反转链表,链表的中间结点,合并两个有序链表
  • Day25| 491.递增子序列、46.全排列
  • SQL Server(2022)安装教程及使用_sqlserver下载安装图文
  • redis-plus-plus安装与使用
  • [BUG]关于UE5.6编译时出现“Microsoft.MakeFile.Targets(44,5): Error MSB3073”问题的解决
  • 30天打牢数模基础-SVM讲解
  • Facebook 开源多季节性时间序列数据预测工具:Prophet 快速入门 Quick Start
  • UE5多人MOBA+GAS 26、为角色添加每秒回血回蓝(番外:添加到UI上)
  • Go并发聊天室:从零构建实战
  • Mysql(事务)
  • 30个常用的Linux命令汇总和实战场景示例
  • 30天打牢数模基础-粒子群算法讲解
  • 详解Mysql索引合并