牛客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
英文地址,請注明出處:http://en.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;接著找到菜單欄…