栈+贪心+二分图染色法,P1155 [NOIP 2008 提高组] 双栈排序 📅 发布时间:2026/7/5 4:39:11 👁️ 浏览次数: 目录一、题目1、题目描述2、输入输出2.1输入2.2输出3、原题链接二、解题报告1、思路分析2、复杂度3、代码详解一、题目1、题目描述2、输入输出2.1输入2.2输出3、原题链接https://www.luogu.com.cn/problem/P1155二、解题报告1、思路分析先考虑单栈怎么做如果 i j, p[i] p[j]那么 p[i] 要先比 p[j] 出栈但如果 存在 k j 并且 p[k] p[i]就无法单栈排序了这是2026年408数据结构大题T2沟槽的408还在追我也就是说当出现 i j kp[k] p[i] p[j]那么单栈无法排序必须将三个数放入两个栈、考虑到答案要操作序列字典序最小我们尽可能让操作a在靠前的位置做那么 p[i] 进入栈1操作ap[j] 就必须进入栈2(操作c)那么p[k] 就要进入栈1操作a来保证操作序列最小预处理suf[i] 代表 [i..n - 1] 的最小值也就是说我们可以按照从小到大的方式遍历下标i然后枚举j如果存在suf[j 1] p[i] p[j]那么我们将i, j 连边然后跑二分图染色如果是二分图那么一定可双栈排序否则不能然后我们染完色后遍历 p[1] ~ p[n]如果p[i] 属于栈1那么我们弹出所有栈1比p[i] 小的数入栈即可属于栈2类似2、复杂度时间复杂度O(N) 空间复杂度O(N)3、代码详解#include bits/stdc.h namespace ranges std::ranges; namespace views std::views; using i64 long long; int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n; std::cin n; std::vectorint p(n); for (int i 0; i n; i) { std::cin p[i]; --p[i]; } std::vectorint suf(n); for (int i n - 1; i 0; --i) { suf[i] p[i]; if (i 1 n) { suf[i] std::min(suf[i], suf[i 1]); } } std::vectorstd::vectorint adj(n); for (int i 0; i n; i) { for (int j i 1; j 1 n; j) { if (p[i] p[j] p[i] suf[j 1]) { adj[i].push_back(j); adj[j].push_back(i); } } } std::vectorint col(n); std::queueint q; for (int i 0; i n; i) { if (col[i] 0) { continue; } col[i] 1; q.push(i); while (!q.empty()) { int u q.front(); q.pop(); for (int v : adj[u]) { if (col[v] 0) { col[v] 3 - col[u]; q.push(v); } else if (col[v] col[u] ! 3) { std::cout 0 \n; return 0; } } } } std::stackint stk1, stk2; std::vectorchar ans; int cur 0; for (int i 0; i n; ) { if (col[i] 1 (stk1.empty() || p[i] stk1.top())) { stk1.push(p[i]); ans.push_back(a); } else if (!stk1.empty() stk1.top() cur) { stk1.pop(); ans.push_back(b); cur; } else if (col[i] 2 (stk2.empty() || p[i] stk2.top())) { stk2.push(p[i]); ans.push_back(c); } else if (!stk2.empty() stk2.top() cur) { stk2.pop(); ans.push_back(d); cur; } } while (!stk1.empty() || !stk2.empty()) { if (!stk1.empty() stk1.top() cur) { stk1.pop(); ans.push_back(b); cur; } else { assert(!stk2.empty() stk2.top() cur); stk2.pop(); ans.push_back(d); cur; } } for (int i 0; i 2 * n; i) { std::cout ans[i] \n[i 1 2 * n]; } return 0; }
基于SSM+VUE的信科食堂订餐系统[java]-计算机毕业设计源码+LW文档 摘要:随着互联网技术的飞速发展,传统的食堂订餐模式已难以满足人们便捷、高效的需求。本文设计并实现了基于SSM(SpringSpringMVCMyBatis)后端框架和Vue前端框架的信科食堂订餐系统。该系统旨在为信科食堂的用户提供一个在线订餐平… 2026/5/17 9:28:27
雾锁王国Enshrouded游戏联机服务器搭建教程 当贪婪引致灾祸,迷雾吞噬大陆,你是薪谷王国最后的火种 ——火焰之子。苏醒吧,在瘴气与危机中杀出一条复兴之路,这是至多 16 人联机合作的生存动作 RPG,带你体验从孤勇者到筑城者的完整成长。想和朋友在雾中自由建城堡、… 2026/5/17 9:28:28
自进化测试框架:AI编写AI测试用例的范式革命 第一章 范式转移:传统测试的边界突破 graph LR A[手工测试] --> B[自动化脚本] B --> C[数据驱动框架] C --> D[AI自进化系统] 关键瓶颈突破: 用例维护成本:某金融系统版本迭代后,传统脚本修复耗时占测试总时长67% → … 2026/5/17 9:28:26
HP WebInspect实战:从安装配置到自动化扫描的完整指南 1. 项目概述:为什么选择HP WebInspect作为你的Web应用安全“哨兵” 在Web应用安全测试这个领域,工具的选择往往决定了效率和深度。市面上有开源神器如Burp Suite,也有各种商业平台,但当你面对的是一个庞大、复杂且对稳定性要求极高… 2026/7/5 9:40:41
新手入门:5分钟搭建Dracnmap渗透测试环境与Nmap扫描实战 1. 项目概述:为什么选择Dracnmap作为你的第一把“瑞士军刀”如果你刚接触网络安全,或者对“渗透测试”这个词既感到好奇又有点无从下手,那你来对地方了。今天我们不谈那些复杂的理论,也不讲需要深厚编程背景的自动化框架ÿ… 2026/7/5 9:40:41
基于RSA非对称加密的软件本地化授权管理全栈实现 1. 项目概述:从“密钥吊销”到自主可控的授权管理如果你是一名开发者、运维工程师或者经常需要处理文件对比、合并的从业者,Beyond Compare(简称BC)这款工具大概率是你的“吃饭家伙”。它强大的文件夹和文件对比、同步功能&#x… 2026/7/5 9:38:40
基于混合混沌映射的彩色图像加密方案设计与MATLAB实现 1. 项目概述:当混沌遇上图像加密 最近在整理一些老项目,翻到了几年前做的一个关于彩色图像加密的课题。当时的目标很明确:设计一个既安全又高效的加密方案,用来保护数字图像的隐私。市面上很多加密算法要么计算量太大,… 2026/7/5 9:38:40
VBA技术资料504_VBA_修改某种颜色为指定颜色 我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#… 2026/7/5 9:36:40
Selenium+图鉴平台破解滑动验证码:自动化登录欧模网实战 1. 项目概述与核心价值 最近在搞一个自动化数据采集的项目,目标网站是欧模网。这个网站的设计师案例库和素材资源非常丰富,但想批量获取信息,第一步的登录就卡住了——它用的是那种经典的滑动拼图验证码。手动操作一两次还行,但要… 2026/7/5 9:36:39
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36